比较两个查询结果和输出差异

时间:2017-06-18 01:45:29

标签: mysql sql

我对同一个表有两个查询:

  1. SELECT * FROM table WHERE fileName ='x';
  2. SELECT * FROM table WHERE fileName ='y';
  3. 现在,我正在尝试比较这些查询返回的结果。我没有可以比较的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而不同,因此这是应该返回的行。

1 个答案:

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