0

私はTABLE、product_catalog_varchar.value から値を挿入しようとしている vendor_productに 1 つの列 (state_not_allowed) を持っています。 .

私は基本的に、Excel VLOOPUP に相当する MySQL を実行しようとしています。次のクエリの結果が必要です。

SELECT product_catalog_varchar.value
FROM product_catalog_varchar
JOIN product_catalog 
ON product_catalog.id = product_catalog_varchar.id
JOIN vendor_product
ON vendor_product.sku = product_catalog.sku
AND product_catalog_varchar.attribute_id = 523

列 state_not_allowed に挿入されます。ここで、vendor_product の sku = product_catalog の sku です。

INSERT INTO、ここ、およびGoogleで一般的に調査を行いました。そこにある多くの指示はより単純なクエリにあるように見えるので、何をすべきかを理解するための適切なモデルを見つけることができませんでした. このクエリは機能しないと言えます。

INSERT INTO vendor_product(`state_not_allowed`)
SELECT product_catalog_varchar.value
FROM product_catalog_varchar
JOIN product_catalog 
ON product_catalog.id = product_catalog_varchar.id
JOIN vendor_product
ON vendor_product.sku = product_catalog.sku
AND product_catalog_varchar.attribute_id = 523

次のエラーがスローされます: #1062 - キー 2 のエントリ '' が重複しています

そして、vendor_product に到達して見てみると、単に値を state_not_allowed に挿入するのではなく、まったく新しい行 (データなし) を作成しています。明らかに、私はここで根本的な意味で誤解しています。手伝ってください?ありがとうございます。

4

1 に答える 1

0

このクエリは、実行したいことの一般的なアイデアを示しています。

insert into table2
(field1)
select distinct field1
from table1
where field1 in
(select field1
from table1
except 
select field1
from table2)

詳細は RDBMS ごとに異なります。たとえば、Oracle では、except の代わりにキーワードマイナスを使用します。詳細については、MySql のドキュメントが役立ちます。

「not in」を使用してこれを単純化するのは魅力的ですが、その構成は遅くなる傾向があることに注意してください。

于 2013-09-20T17:34:45.803 に答える