2011-11-02 76 views
1

我在SQL Server(ver:2008)中有2个表。两个表都有类似的结构。第二个表格有少量额外的列。我想编写一个查询来显示这些表中的差异(用于匹配字段)。输出应该并排显示来自两个表的列(用于比较)。SQL Server - 如何显示两个类似表中不同的值

我试过使用EXCEPT,它显示表1的结果与表2中的结果不匹配。但我需要并排显示两个结果。

谢谢。

+0

只是要清楚....你想在X列中的数据或列高炮定义之间的差异的差异解,实施例X上形成为varchar(10)和X上B被VARCHAR(11) ? – AFF

+0

数据。不是列定义。谢谢。 – M99

回答

0

您只需选择要显示的字段:

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 ... 
+0

这种方法需要我所在的条件下的所有字段。没有更好的方法来避免这种情况。例如:EXCEPT提供所有不同的字段,如何使用该信息显示两个表中的字段。 – M99

+0

这不会比较空值,例如,如果t1.field1具有空值,但t2.field具有值(非空值),它将不会在比较结果中显示,尽管它们不相似 – AaA

0

例如,如果你有2个表,Products1Products2,都与列NamePriceColor等等,你想列出所有不同的产品,你可以使用这个:

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 
0

给这个一杆。它假定表中有一列(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 ...) 
0
SELECT * FROM 
(
SELECT * FROM TABLE1 
EXCEPT 
SELECT * FROM TABLE2 
) T1 

UNION ALL 

SELECT * FROM 
(
SELECT * FROM TABLE2 
EXCEPT 
SELECT * FROM TABLE1 
) T2 
相关问题