2017-10-13 110 views
1

如何为每个匹配或不匹配的行比较两个表。 我有一个表像下面每一行是设备的配置,我需要与其他同台比较这并找到该行不匹配有如何比较两个相同的表来匹配或不匹配行?

PID DEVID INID EVTYPEID EVID ALID PARMID TEXTID 
1 20  0  30  0 100102  0 14 
1 103  0  30  0 100103  0 15    
9 21  0  30  0 100113  0 25 
0 31  2  30  0 100114  0 26 
8 38  18  4  53 100114  0 0 
4 20  17  4  53 1000114  0 0 

谢谢

+2

你有什么问题?您需要决定如何连接表,然后INNER JOIN会为您提供匹配记录,并且LEFT JOIN和WHERE [加入列] IS NULL将为您提供不在其他表中的记录。 – Leonidas199x

+0

你到目前为止尝试过什么?看起来像是一个非常简单的查询:在ID列上加入两个表,并比较其他列(如果匹配或不匹配)。 – waka

+0

@ Leonidas199x,我不能让左联合工作在这里。不知何故,我没有得到它 – coffemug

回答

2

您可以使用except。您可能需要指定表格列以确保它们的顺序正确。

select * 
from tbl1 

except 

select * 
from tbl2 

而对于匹配行,你可以使用intersect

+2

即将发布相同的内容。这里记录的是EXCEPT文档。 https://docs.microsoft.com/en-us/sql/t-sql/language-elements/set-operators-except-and-intersect-transact-sql –

+0

我总是忘记'Except'。把它想象成一个“左联盟”。 :-) –

+0

它返回了181条记录。 – coffemug

0

您可以使用existsnot existsinnot in的表之间的比较值。

Select PID, DEVID, INID, EVTYPEID,EVID ALID,PARMID,TEXTID from tableA as A 
where exists (select 1 from tableB as B where a.PID=b.PID and a.DEVID=b.DEVID...) - - you can add as per ur requirement) 
+0

select 1,这是什么意思 – coffemug

+0

@coffemug如果您从子查询中获得任何匹配记录,我们可以返回一些值,如1或任何列值,以便从主表中获取相应的匹配记录。 – Rams

相关问题