在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
感谢所有人。
答案 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