我在SQL Server(ver:2008)中有2个表。两个表都有类似的结构。第二个表格有少量额外的列。我想编写一个查询来显示这些表中的差异(用于匹配字段)。输出应该并排显示来自两个表的列(用于比较)。SQL Server - 如何显示两个类似表中不同的值
我试过使用EXCEPT,它显示表1的结果与表2中的结果不匹配。但我需要并排显示两个结果。
谢谢。
我在SQL Server(ver:2008)中有2个表。两个表都有类似的结构。第二个表格有少量额外的列。我想编写一个查询来显示这些表中的差异(用于匹配字段)。输出应该并排显示来自两个表的列(用于比较)。SQL Server - 如何显示两个类似表中不同的值
我试过使用EXCEPT,它显示表1的结果与表2中的结果不匹配。但我需要并排显示两个结果。
谢谢。
您只需选择要显示的字段:
select t1.*, t2.*
from table1 t1
inner join table2 t2 on t1.ID = t2.ID
where t1.field1 <> t2.field1 OR t1.field2 <> t2.field2
OR ...
例如,如果你有2个表,Products1
和Products2
,都与列Name
,Price
,Color
等等,你想列出所有不同的产品,你可以使用这个:
SELECT Name FROM Products1
UNION
SELECT Name FROM Products2
或者,你可以使用FULL JOIN关键字,当在一个表匹配返回行。例如:
的“汽车总动员”表:
P_Id Name Color Quality City
---- -------- ----- ------- -----------
1 BMW Red good Las Vegas
2 Lexus Blue bad Los Angeles
3 Mercedes Green good MIami
“订单”表:
O_Id OrderNo P_Id
---- ------- ----
1 123 3
2 234 3
3 345 1
4 456 1
5 689 18
现在,我们要列出所有的汽车和所有与他们发号施令的人。
我们使用:
SELECT Cars.Name, Cars.Color, Orders.OrderNo
FROM Cars
FULL JOIN Orders
ON Cars.P_Id=Orders.P_Id
ORDER BY Cars.Name
结果:
Cars Color OrderNo
-------- ----- -------
BMW Red 345
BMW Red 456
Mercedes Green 123
Mercedes Green 234
Lexus Blue -
- - 689
给这个一杆。它假定表中有一列(a)相同,其余(b,c,...)可能不同。
SELECT t1.a, t2.a, t1.b, t2.b, t1.c, t2.c, ...
FROM table1 t1
JOIN table2 t2
ON t1.a = t2.a
AND NOT (t1.b = t2.b AND t1.c = t2.c ...)
SELECT * FROM
(
SELECT * FROM TABLE1
EXCEPT
SELECT * FROM TABLE2
) T1
UNION ALL
SELECT * FROM
(
SELECT * FROM TABLE2
EXCEPT
SELECT * FROM TABLE1
) T2
只是要清楚....你想在X列中的数据或列高炮定义之间的差异的差异解,实施例X上形成为varchar(10)和X上B被VARCHAR(11) ? – AFF
数据。不是列定义。谢谢。 – M99