我对同一个表有两个查询:
现在,我正在尝试比较这些查询返回的结果。我没有可以比较的ID,但我需要比较每一列。
我试图修改这种方法,如here所示:
SELECT 'robot' AS `set`, r.*
FROM robot r
WHERE ROW(r.col1, r.col2, …) NOT IN
(
SELECT *
FROM tbd_robot
)
UNION ALL
SELECT 'tbd_robot' AS `set`, t.*
FROM tbd_robot t
WHERE ROW(t.col1, t.col2, …) NOT IN
(
SELECT *
FROM robot
)
我不确定如何正确修改此代码。我尝试将表名更改为同一个表但在SQL异常中添加WHERE
子句失败。
这是最好的路线吗?也许有一种更聪明的方法来比较两个查询结果并输出差异?
非常感谢您的帮助: - )
编辑:
示例数据:
ID | fileName | firstName | lastName | address
1 | x.txt | John | Doe | 1 Test st
2 | x.txt | Jane | Doe | 3 Test st
3 | y.txt | John | Doe | 2 Test st
4 | y.txt | Jane | Doe | 3 Test st
由于地址因ID = 3而不同,因此这是应该返回的行。
答案 0 :(得分:1)
也许select col1, col2, col3, . . .,
sum(fileName = 'x') as count_x,
sum(fileName = '7') as count_y
from table t
where fileName in ('x', 'y')
group by col1, col2, col3, . . .;
是一种更简单的方法:
'x'
对于您指定的列,您将获得包含'y'
和having count_x <> count_y
的行数。
您可以通过将var_dump
放在查询末尾来输出差异。