向INSERT INTO ON DUPLICATE KEY UPDATE语句添加内联和where子句

3

我从这个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个回答

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;

你的第二行代码 select 1, 2 不太对。难道 1 和 2 不应该是列名而不是列值吗? - user6064424
我用另一种方式提出了这个问题。https://dev59.com/o5jga4cB1Zd3GeqPNKTQ - user6064424
@LitAiy . . . “1”和“2”是从问题中提取的。 - Gordon Linoff

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  

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:如何在具有外键的表中插入值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接