【发布时间】:2012-03-09 14:54:00
【问题描述】:
我必须检查两个查询(例如更新和删除语句)是否影响 MySQL 数据库中的同一行。
我考虑过使用 select 选择受影响的查询条目,并检查两个查询中是否出现同一行:
UPDATE Foo SET col = 'a' WHERE id > 5;
DELETE FROM Foo WHERE col = 'b';
SELECT (SELECT * FROM Foo WHERE col = 'b') IN (SELECT * FROM Foo WHERE id > 5);
实际上,它适用于我的简单Foo 表,但在另一个包含多列的表中失败 - 即使两个子选择完全相同。同样使用此解决方案,第一个子选择只能包含一个结果。
有谁知道其他解决方案或上述选择可能因另一个表而失败的原因?
【问题讨论】:
-
对
IN(...)子句使用子选择要求子选择仅返回单列值。当返回多个列时,SQL 将不知道您要比较 IN 内容的哪个字段。