2017-06-18 79 views
0

我对相同的表的两个查询:比较两个查询结果与输出差分

  1. SELECT * FROM表其中filename =“X”;
  2. SELECT * FROM table WHERE fileName ='y';

现在,我试图比较这些查询返回的结果。没有我可以比较的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 
    ) 

我不知道如何正确地修改此代码。我尝试将表名更改为同一个表,但添加WHERE子句在SQL异常中失败。

这是最好的选择吗?也许有更聪明的方法来比较两个查询结果并输出差异?

非常感谢您的帮助提前:-)

编辑:

样本数据:

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,这是一行应该返回。

+1

可能有几种方法可以做到这一点,但首先你需要澄清...你是什么意思比较两个表?你希望比较什么标准?如果你发布了一些你的数据样本以及你想要输出的样子,它可能会有所帮助。 – SandPiper

+0

根据@SandPiper的要求添加了一些示例数据 – jrn

回答

1

也许group by是一个简单的方法:

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放在查询末尾来输出差异。