MySQL从SELECT查询中插入到单个列中,从另外两个表中提取数据-抛出1062-键2的重复项“”错误

MySQL从SELECT查询中插入到单个列中,从另外两个表中提取数据-抛出1062-键2的重复项“”错误,mysql,sql,insert,vlookup,insert-into,Mysql,Sql,Insert,Vlookup,Insert Into,我在vendor\u product表中有一个col state\u not \u allowed,我试图从product\u catalog\u varchar.value中插入值,但前提是vendor\u product中有一个sku与product\u catalog中的sku匹配,其中product\u catalog的id等于product\u varchar的id,product\u catalog\u varchar的属性id=523 我基本上是在尝试做MySQL的Excel VL

我在vendor\u product表中有一个col state\u not \u allowed,我试图从product\u catalog\u varchar.value中插入值,但前提是vendor\u product中有一个sku与product\u catalog中的sku匹配,其中product\u catalog的id等于product\u varchar的id,product\u catalog\u varchar的属性id=523

我基本上是在尝试做MySQL的Excel VLOOPUP。我需要以下查询的结果:

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
插入到列状态“不允许”,其中供应商产品中的sku=产品目录中的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-键2的重复条目


如果我访问供应商的产品并查看,它不是简单地在state\u not\u allowed中插入值,而是创建一个没有数据的全新行。很明显,我在这里是一个基本意义上的误解。帮帮我?谢谢各位。

此查询显示了您想做什么的大致想法

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来简化这一过程很有诱惑力,但速度往往很慢。

如果第一次加入时相同,为什么WHERE子句中有“product\u catalog.id=product\u catalog\u varchar.id”?问得好。我想我在写查询的时候分心了。很好。我在这里跟随您的查询,但是我有点困惑,在这里我应该在哪里交叉引用SKU,以确保供应商产品中的值,或者在您的示例中,表2中的值被分配到正确的行。该示例显示了如何插入行,除非您已经有行。检查数据的准确性是另一个问题。也许给where子句添加更多的条件就可以了。也许在子查询的上半部分添加where子句可以满足您的需要。你知道你的数据库,不是我。