2016-05-16 69 views
2

我有兩個表A和B一列的如何。減去行:SQL服務器:從另一個表的列行

  • A的ID,ColumnA
  • B有ID,ColumnB

甲看起來像:

id ColumnA 
----------- 
1 A1 
5 A5 
7 A7 

乙看起來像:

id ColumnB 
----------- 
1 B1 
3 B3 
5 B5 
8 B8 

我想導致像B表,即(ID,ColumnB)應該是表B值,但不是在表A

所以,結果應該是這樣的:

Id ColumnB 
----------- 
3 B3 
8 B8 

我怎樣纔能有效地做到這一點?

我嘗試使用左連接和內連接,然後減法,但我認爲它可以以更好的方式完成..建議?

回答

3

使用NOT EXISTS謂詞

SELECT * FROM B WHERE NOT EXISTS (SELECT 1 FROM A WHERE A.ID = B.ID) 
3

使用NOT EXISTS做到這一點

select id, ColumnB 
from tableB B 
where not exists (select 1 from tableA A where B.Id = A.Id) 
2
SELECT * 
FROM B 
WHERE id NOT IN (SELECT ID FROM A) 

看着你所描述的兩個表,id似乎沒有可空在兩個表中,所以上述查詢將起作用。但是,在子查詢可能返回NULL值的情況下,您應該謹慎使用IN

+1

不得辦理'NULL'值以及 –

+0

@Prdp:不確定你的建議。一個例子可能有幫助。 – dotNET

+0

當你的子查詢返回任何NULL值時,'NOT IN'將失敗 –

1

如果你用左連接,就可以過濾掉表A的where子句中的值,即

select * 
from A 
left join B on A.Id = B.Id 
where A.Id is null 
0
Select * From B 
    Where Not Exists (Select null From A Where A.ID = B.ID)