0

基本的に、テーブルに別のテーブルの製品コードを入力しようとしています。Productsテーブルには製品サイズに関するデータがあるため、コードを繰り返すことができますが、この値はProductDescriptionsで一意である必要があります。

Productsテーブルに新しいDISTINCT製品コードがあるたびに、 ProductDescriptionsテーブルに新しいエントリが必要です。

私はあらゆる種類のことを試しましたが、成功しませんでした。それほど複雑には見えませんが、困惑しました。

私はこれを試しました:

INSERT INTO ProductDescriptionsbackup(ProductID) SELECT DISTINCT `PRODUCT CODE` FROM Products

ただし、DISTINCT 値を取得できないため実行されず、長期的には自動的に更新されませんが、これは二次的な問題になります。

主な問題は、DISTINCT 値を ProductDescriptions テーブルに取得することです。

答えを探してみましたが、目立って意味のあるものは何もありませんでした。ご協力いただきありがとうございます。

4

2 に答える 2

1

あなたの質問は 2 つの部分で構成されています。1 つ目は、製品に新しい行を挿入するときに ProductDescriptions が常に更新されることを保証することです。2 つ目は、新しい値を挿入する方法です。

最初の部分には 2 つのオプションがあります。コード内で、製品テーブルに挿入するたびに製品説明を明示的に挿入する責任があります。または、挿入後にトリガーを作成してそれを行うことができます。

create trigger ai_eav
after insert on eav
for each row
(...)

挿入を忘れないように、この 2 番目のオプションをお勧めしますが、通常は忘れてしまうため、トリガーがプログラマーに「見えなくなる」可能性があるため、トリガーを好まない人もいます。

2番目の部分では、存在しない場合は挿入を実行できます。これは、左結合で挿入を実行することで実現できます

insert into ProductDescriptions(ProductID)
select distinct p.`PRODUCT CODE` 
from Products 
left join join ProductDescriptions on `PRODUCT CODE` = ProductID
where ProductID is null

トリガーを選択すると、疑似行newを利用して、製品テーブル全体を操作する代わりに単一の行を操作するため、挿入をさらに高速化することもできます。

于 2013-06-27T16:32:54.577 に答える
1

新しい値を挿入しようとしているだけなら、これでうまくいくはずです。ターゲット テーブルへの左結合を作成し、存在しないレコードのみを含めることができます ( WHERE pbu.ProductID IS NULL)。

INSERT INTO ProductDescriptionsbackup(ProductID) 
SELECT DISTINCT p.`PRODUCT CODE` 
FROM   Products as p
       LEFT JOIN ProductDescriptionsbackup as pbu
       ON p.`PRODUCT CODE` = pbu.ProductID
WHERE  pbu.ProductID IS NULL;
于 2013-06-27T16:25:30.020 に答える