MySQL UPDATE查询不适用于WHERE IN条件

时间:2017-08-16 14:17:54

标签: mysql

在下面的查询A 中:

UPDATE table1
SET table1.val1 = 0
    AND table1.val2 = 0
    AND table1.val3 = 0
WHERE table1.foreign_key IN (SELECT DISTINCT table2.key FROM table2)

对于所有条目,我希望将val1val2val3更新为0,我将从查询B 获取:

SELECT *
FROM table1
WHERE table1.foreign_key IN (SELECT DISTINCT table2.key FROM table2)

但是,在我的情况下,只有大约十分之一的条目返回查询B,在查询A中进行了更新。

如何更新查询B返回的所有条目?

2 个答案:

答案 0 :(得分:2)

SET子句中的表达式必须用逗号分隔,而不能用AND

分隔
UPDATE table1 t1
SET t1.val1 = 0,
    t1.val2 = 0,
    t1.val3 = 0
WHERE t1.foreign_key IN (SELECT DISTINCT table2.key FROM table2)

除了缺少逗号之外,您还可以在更新查询中使用表别名。别名使我们不必在任何地方重复完整的表名,使查询更容易编写和读取。

有关更多信息,请参阅mysql documentation

答案 1 :(得分:0)

试试这个

UPDATE table1
SET table1.val1 = 0, table1.val2 = 0 , table1.val3 = 0
INNER JOIN table2 ON table1.foreign_key = table2.key 

你可以在table2.key

上找到空值