2016-03-08 144 views
1

我有表1:從表中選擇記錄,其中兩列不存在於另一個表

Id  Program Price Age 
12345 ABC  10  1 
12345 CDE  23  3 
12345 FGH  43  2 
12346 ABC  5  4 
12346 CDE  2  5 
12367 CDE  10  6 

和表2:

ID  Program BestBefore 
12345 ABC  2 
12345 FGH  3 
12346 ABC  1 

我想在下表中,

Id  Program Price Age 
12345 CDE  10  1 
12346 CDE  2  5 
12367 CDE  10  6 

即得到第一個表中ID +程序不在第二個表中的行。我正在使用MS SQL Server Express 2012,我不想將任何列添加到原始數據庫。是否可以不創建臨時變量?

+0

你有什麼累了嗎? '不存在','不在','外部連接/空'檢查 - 很多方法來做到這一點... – sgeddes

+0

不在。但如何指定兩列? – Morpheus

回答

2

幾種方法可以做到這一點,這裏有一個使用not exists

select * 
from table1 t1 
where not exists (
    select 1 
    from table2 t2 
    where t1.id = t2.id and t1.program = t2.program 
) 
+0

你能否請求解釋選擇1做什麼? – Morpheus

+1

@Morpheus - 'not exists'不關心選擇哪個字段 - 因此'選擇1'或'select *'(不同於'not in')。這會產生一個「相關的子查詢」 - 檢查已經存在的'id'和'program'。 – sgeddes

1

一個可能的變化是使用LEFT JOIN

SELECT 
    Table1.* 
FROM 
    Table1 
    LEFT JOIN Table2 
     ON Table1.ID = Table2.ID 
     AND Table1.Program = Table2.Program 
WHERE 
    Table2.ID IS NULL 
相關問題