2016-08-08 102 views
-2

我想從SQL結果:SQL - 如果選擇不選擇B,則選擇b,否則沒有

我有2種選擇:

Select columnA from table1; 

Select columnA, columnB, columnC from table2; 

我想要回第二選擇如果來自選擇1的所有結果都不會像選擇2.

實施例的%columnA%:從選擇1 結果;

Hot Dog 
Hamburger 
Fries 

結果來自Select 2;

Shake | Chocolate | 100 cal 
Fries | Curly | 200 cal 

希望能得到結果(後如果):

Shake | Chocolate | 100 cal 
+3

我想你可以問一個更好的問題。 – Strawberry

回答

1

你想有選擇2,其結果過濾,所以使用where子句:

Select columnA, columnB, columnC 
from table2 
where columnA not in (select columnA from table1); 

萬一columnA表1中可以爲空,你就必須添加where columnA is not null到內部查詢,或者使用相關not exists查詢,而不是not in

這裏是not exists相同:

Select columnA, columnB, columnC 
from table2 
where not exists (select * from table1 where table1.columnA = table2.columnA); 

如果你真的想用通配符匹配,更改後的查詢:

Select columnA, columnB, columnC 
from table2 t2 
where not exists 
(
    select * 
    from table1 t1 
    where t1.columnA like '%' + t2.columnA + '%' 
); 
+0

雖然不是真的會給你通配符 - 除非OP並不真正意味着要包括那些? –

+1

@David T. Macknet:你說得對。我錯過了。在這種情況下,人們必須使用'not exists'。我會添加這個。 –

+0

我更喜歡使用N個時,因爲如果有一個NULL它不會給你預期的結果的方法可行的存在。所以我喜歡你添加了這個答案,但是你的聲明仍然沒有使用類似的。 WHERE table2.ColumnA LIKE + '%' table1.ColumnA + '%' – Matt

1
SELECT t2.* 
FROM 
    table2 t2 
    LEFT JOIN table1 t1 
    ON t2.ColumnA NOT LIKE '%' + t1.ColumnA + '%' 
WHERE 
    t1.ColumnA IS NULL 
相關問題