基于this answer,我试图基于表b
中的值更新表a
中的列,其中表b
具有表{{的外键1}}。我的查询成功执行,并在受影响的行上按预期工作。但是,它不会影响所有行,而且我也不明白为什么。无论数据库多大,它似乎只影响三行。
以下是可重现的示例:
a
预期结果:
实际结果:
在sqlite 3.26.0上测试
答案 0 :(得分:2)
您的更新声明:
UPDATE b SET SameQty = 0 WHERE aID = (SELECT aID from a where qty1 != qty2);
有一个可以返回多行的子查询,但是在只需要一行的上下文中使用。我觉得那应该引起一个错误,但是如果您没有看到一个错误,也许只是从结果中选择了一个任意行?
无论如何,您想要IN
:
UPDATE b SET SameQty = 0 WHERE aID IN (SELECT aID from a where qty1 != qty2);
答案 1 :(得分:2)
您使用的子查询在执行“ WHERE aID = (SELECT aID from a
”时可以并且确实在标量上下文中返回多个行。使用IN
代替=
。
UPDATE b SET SameQty = 0 WHERE aID IN (SELECT aID from a where qty1 != qty2);
UPDATE b SET SameQty = 1 WHERE aID IN (SELECT aID from a where qty1 = qty2);