Mysql 在重复密钥更新时添加要插入的内部联接和where子句

Mysql 在重复密钥更新时添加要插入的内部联接和where子句,mysql,sql,join,Mysql,Sql,Join,我从这个INSERT INTO ON DUPLICATE KEY UPDATE MySQL语句开始 INSERT INTO Table1 ( field1, field2) VALUES (1, 2) ON DUPLICATE KEY UPDATE field1 = 1, field2 = 2 然后,我遇到了一个错误“外键约束失败” 我意识到我需要添加另一个WHERE子句条件来满足带有内部联接的外键约束 我试过这样的东西 INSERT INTO Table1 ( field1, field2)

我从这个INSERT INTO ON DUPLICATE KEY UPDATE MySQL语句开始

INSERT INTO Table1 ( field1, field2)
VALUES (1, 2)
ON DUPLICATE KEY UPDATE field1 = 1, field2 = 2
然后,我遇到了一个错误“外键约束失败”

我意识到我需要添加另一个WHERE子句条件来满足带有内部联接的外键约束

我试过这样的东西

INSERT INTO Table1 ( field1, field2)
Inner Join Table2
ON Table2.id = Table1.field_id
VALUES (1, 2)
ON DUPLICATE KEY UPDATE field1 = 1, field2 = 2
WHERE Table2.addr='123456'

我发现语法错误。写这个MySQL语句的正确方法是什么?

我不确定您到底想做什么。但是,您可以将任何
select
语句放入
insert。选择
语句,并在重复密钥更新时仍使用。例如:

insert into Table1(field1, field2)
    select 1, 2
    from table1 t1 join
         table2 t2
         on t2.id = t1.field_id
    where t2.addr = '123456'
    on duplicate key update field1 = 1, field2 = 2;

因为您遇到了外键约束,所以必须解决该问题才能使插入工作

您的查询应该类似于

INSERT INTO Table1 ( field1, field2, foreign_key_id)
Select (1, 2, foreign_key_id)
where 
...
ON DUPLICATE KEY UPDATE field1 = 1, field2 = 2
我相信阅读这个问题的答案会解决你的问题。

您的第二行
选择1,2
似乎不正确。1,2不应该是列的名称而不是列的值吗?我用另一种方式问这个问题@利塔伊。“1”和“2”取自问题。
INSERT INTO Table1 ( field1, field2, foreign_key_id)
Select (1, 2, foreign_key_id)
where 
...
ON DUPLICATE KEY UPDATE field1 = 1, field2 = 2