0

我在TABLEvendor_product 中有一个 col (state_not_allowed),我试图从 product_catalog_varchar.value 插入值 - 但前提是 vendor_product 中的 sku 与 product_catalog 中的 sku 匹配,其中 product_catalog 的 id 等于 product_catalog_varchar 的 id 和 product_catalog_varchar 的属性 id = 523 .

我基本上是在尝试做相当于 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我已经对, here 和 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 - Duplicate entry '' for key 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 使用关键字 minus 而不是 except。您的 MySql 文档将帮助您了解详细信息。

请注意,虽然通过使用“not in”来简化这一点很诱人,但该构造往往很慢。

于 2013-09-20T17:34:45.803 回答