将内连接和where子句添加到INSERT INTO IN DUPLICATE KEY UPDATE

时间:2016-07-05 10:38:20

标签: 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)
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语句的正确方法是什么?

3 个答案:

答案 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