如果它们影响同一行,如何比较两个查询?

时间:2012-03-09 14:54:01

标签: mysql compare row

我必须检查两个查询(例如更新和删除语句)是否会影响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表,但在另一个包含多个列的表中失败 - 即使两个子选择完全相同。同样使用此解决方案,第一个子选择只能包含一个结果。

是否有人知道另一个解决方案或上述选择可能因另一个表失败的原因?

2 个答案:

答案 0 :(得分:0)

要获得受两者影响的行,只需要WHERE条件,只需执行;

SELECT * FROM Foo WHERE (col='b') AND (id>5);

IN仅适用于设计的单列结果,抱歉。

答案 1 :(得分:0)

我现在部分使用PHP解决了我的问题,而不是仅使用MySQL解决它。

我选择相关查询的受影响条目,并在我的应用程序中比较结果(在我的情况下,它是用PHP实现的)。

为什么我不通过MySQL的一个查询来解决它? 目前我要比较查询,我不知道查询给出的任何其他内容。我仍然知道哪些表受影响以及哪些列,但我不知道这些表是如何构造的或哪个列是主键(或者甚至有多个主键)。这就是我或多或少在PHP中编写自己的IN函数的原因。

另一种解决方法可能是从MySQL获取主键(例如使用DESCRIBE)并使用Joachim Isaksson所描述的解决方案。

只是想和你分享。