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

Mysql 如果两个查询影响同一行,如何比较它们?,mysql,compare,row,Mysql,Compare,Row,我必须检查两个查询(例如update和delete语句)是否影响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); 实际上,

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


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

要获取将受这两种情况影响的行,只需使用WHERE条件即可

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

很抱歉,我现在用PHP部分解决了我的问题,而不是用MySQL

我选择相关查询中受影响的条目,并在我的应用程序中比较结果,在我的例子中,它是用PHP实现的

为什么我不通过MySQL上的一个查询来解决它呢? 目前,如果我要比较这些查询,我不知道该查询给出的任何其他信息。我仍然知道哪些表受到影响,哪些列受到影响,但我不知道这些表是如何构造的,或者哪些列是主键,或者是否有多个主键。这就是为什么我或多或少地用PHP编写了自己的IN函数

另一种解决方法是从MySQL获取主键,例如使用descripe和使用Joachim Isaksson描述的解决方案


只想与您分享。

使用子选择进行输入。。。子句要求子选择只返回一列值。当返回多个列时,SQL不知道要比较IN-stuff的哪个字段。但是,当我要比较一个包含限制和order by的delete语句时,会是什么情况?我的问题是,我不知道我将比较哪些查询,所以我必须涵盖所有情况……如果您的表有主键,比如说它的id,您可以使用它进行IN查询;选择*From Foo,其中id在SELECT id From Foo,其中col='b',id在SELECT id From Foo,其中id>5;