我从这个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语句的正确方法是什么?
答案 0 :(得分:1)
我不确定你想要做什么。但是,您可以在select
语句中添加任何insert . . . select
语句,并仍然使用on duplicate key update
。例如:
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;
答案 1 :(得分:0)
Declare
@Field1 VARCHAR(255),
@Field2 VARCHAR(255)
SET @Field1= 'Test'
SET @Field2='ABC'
IF EXISTS (SELECT * FROM ##Table1 WHERE ##Table1.Field1=@Field1 AND ##Table1.Field2=@Field2)
BEGIN
UPDATE ##Table1 SET Field1=@Field1,Field2=@Field2
END
ELSE
BEGIN
INSERT INTO ##Table1 VALUES(@Field1,@Field2)
END
SELECT * FROM ##Table1
答案 2 :(得分:0)
由于您遇到了外键约束,因此您必须进行寻址才能使INSERT正常工作。
您的查询应该类似于;
INSERT INTO Table1 ( field1, field2, foreign_key_id)
Select (1, 2, foreign_key_id)
where
...
ON DUPLICATE KEY UPDATE field1 = 1, field2 = 2
我相信阅读这个问题的答案可以解决你的问题。 Mysql: How to insert values in a table which has a foreign key