MSSQL两个表比较特定的行

时间:2017-01-11 11:11:46

标签: sql sql-server

在MSSQL中,我有两个具有相同列的表(表的结构相同)。

我想比较第一张桌子和第二张桌子的数据。我只想比较ID = 5的特定行示例。然后我希望sql显示我只是列/ s和值不同的值。

示例:

First table:

ID  ----- NUMBER ------YEAR ------- VEHICLE_ID

5**********22**********2017*************5

第二张表:

ID  ----- NUMBER ------YEAR ------- VEHICLE_ID

5***********28*********2017************7

预期结果:

---- NUMBER --- VEHICLE_ID
   22           5

   28           7

感谢所有人。

2 个答案:

答案 0 :(得分:0)

这确实很好用。也许有更好的方法。

DECLARE @First TABLE (
    ID INT
    , NUMBER INT
    , VEHICLE_ID INT
    );

DECLARE @Second TABLE (
    ID INT
    , NUMBER INT
    , VEHICLE_ID INT
    );

INSERT INTO @First (ID, NUMBER, VEHICLE_ID)
VALUES (5, 22, 7);

INSERT INTO @Second (ID, NUMBER, VEHICLE_ID)
VALUES (5, 28, 7);

SELECT T.NUMBER, T.VEHICLE_ID
FROM (
    SELECT T1.ID, T1.NUMBER, T1.VEHICLE_ID
    FROM (
        SELECT F.ID, F.NUMBER, F.VEHICLE_ID
        FROM @First AS F
        EXCEPT
        SELECT S.ID, S.NUMBER, S.VEHICLE_ID
        FROM @Second AS S
        ) AS T1
    UNION ALL
    SELECT T2.ID, T2.NUMBER, T2.VEHICLE_ID
    FROM (
        SELECT S.ID, S.NUMBER, S.VEHICLE_ID
        FROM @Second AS S
        EXCEPT
        SELECT F.ID, F.NUMBER, F.VEHICLE_ID
        FROM @First AS F
        ) AS T2
    ) AS T
WHERE T.ID = 5;

输出:

╔════════╦════════════╗
║ NUMBER ║ VEHICLE_ID ║
╠════════╬════════════╣
║     22 ║          7 ║
║     28 ║          7 ║
╚════════╩════════════╝

内部EXCEPT语句找到两个表之间的差异,UNION ALL可以根据需要将它们合并到一个表中。然后我只按ID过滤。

必须有一种更优雅的方式来做到这一点。 :)

答案 1 :(得分:0)

尝试:

select number,vehicle_id from
(select number,vehicle_id,id from first_table
union all
select number,vehicle_id,id from Second_table) a
where id=5