2017-10-13 113 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

相關問題