在下面的查询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)
对于所有条目,我希望将val1
,val2
和val3
更新为0,我将从查询B 获取:
SELECT *
FROM table1
WHERE table1.foreign_key IN (SELECT DISTINCT table2.key FROM table2)
但是,在我的情况下,只有大约十分之一的条目返回查询B,在查询A中进行了更新。
如何更新查询B返回的所有条目?
答案 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
上找到空值