首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在重复键更新中添加要插入的内部联接和where子句

问在重复键更新中添加要插入的内部联接和where子句
EN

Stack Overflow用户
提问于 2016-07-05 10:38:19
回答 3查看 1.9K关注 0票数 3

我从这个INSERT上的重复键UPDATE MySQL语句开始。

代码语言:javascript
复制
INSERT INTO Table1 ( field1, field2)
VALUES (1, 2)
ON DUPLICATE KEY UPDATE field1 = 1, field2 = 2

然后,我遇到了一个“外键约束失败”的错误。

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

我试过这样的方法;

代码语言:javascript
复制
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语句的正确方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-07-06 07:20:43

由于您遇到了外键约束,所以您必须解决插入才能工作。

您的查询应该类似于;

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2016-07-05 10:50:58

我不知道你到底想做什么。但是,您可以将任何select语句放入insert . . . select语句中,但仍然可以使用on duplicate key update。例如:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2016-07-05 11:58:09

代码语言:javascript
复制
   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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38201283

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档