2016-08-08 3 views
-2

B何も選択しません選択1のすべての結果が選択2の%columnA%でなければ第2選択。SQLのSELECT Aが選択Bでない場合、私はSQLからの結果を取得しようとしています

例: セレクト1の結果;

Hot Dog 
Hamburger 
Fries 

セレクト2からの結果。

(後の場合)の結果として得ることを望ん
Shake | Chocolate | 100 cal 
Fries | Curly | 200 cal 

Shake | Chocolate | 100 cal 
+3

私はあなたがより良い質問をすることができると思います。 – Strawberry

答えて

1

あなたがフィルタリングの結果とSELECT2を持っているので、where句を使用したい:場合

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

をtable1のcolumnAがnullの場合、内部クエリにwhere columnA is not nullを追加するか、not inの代わりに相関not existsクエリを使用する必要があります。ここで

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:そうです。私は逃しました。その場合、「存在しない」を使用する必要があります。私はこれを追加します。 –

+0

私はEXISTsを好むのは、Nの可能性がある場合にNを使用すると、意図した結果が得られないからです。だから私はあなたがその答えを追加したが、あなたのwhereステートメントはまだ同様のものを使用していないのが好きです。 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 
関連する問題