是“设置a = 2和b in(1,2,3)”有效的mysql语法

时间:2018-05-04 16:26:37

标签: mysql

当它在set子句中使用时,使用“and”代替“where”是有效的mysql吗?我最近跟踪了一个关键的约束错误,但它已经存在了一段时间,据我所知从未成为问题。

update table1
    join table2 on
        table1.id = table2.id
set table1.foo = 2
    and table1.bar in (1,2,3)

我将最后一个“和”设置为“where”并且代码有效。据我所知,它的更新不会导致关键约束。

编辑: 更新了查询以更接近原始,但同样的原则适用。

2 个答案:

答案 0 :(得分:2)

and不能与set一起使用,但可以与where

一起使用
  

UPDATE table_name SET column1 = value1,column2 = value2,... WHERE   条件;

所以你的sql需要改变:

update table1
    join table2 on
        table1.id = table2.id
set table1.foo = 2,table1.bar = 2

答案 1 :(得分:1)

and更改为where会产生两个完全不同的查询。您的WHERE版本会在所有行上将foo设置为2 其中条形值等于2. AND版本,如果有效,最多将foo设置为等于{{1}的布尔结果},对于所有行。