2016-08-08 26 views
-2

Ich versuche, ein Ergebnis von SQL zu erhalten:SQL - IF wählen A nicht in Select B ist dann wählen B sonst nichts

Ich habe 2 wählt:

Select columnA from table1; 

Select columnA, columnB, columnC from table2; 

Ich möchte, dass die zurück zweite Auswahl, wenn alle Ergebnisse von Auswahl 1 nicht wie% SpalteA% von Auswahl 2 sind.

Beispiel: Ergebnisse von Auswahl 1;

Hot Dog 
Hamburger 
Fries 

Ergebnisse von Select 2;

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

der Hoffnung, als Ergebnis zu erhalten (nach if):

Shake | Chocolate | 100 cal 
+3

Ich denke, man kann eine bessere Frage stellen. – Strawberry

Antwort

1

Sie wollen select2 haben mit ihren Ergebnissen gefiltert, so verwenden Sie eine where-Klausel:

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

Bei columnA in table1 kann null sein, Sie müssten der inneren Abfrage where columnA is not null hinzufügen oder eine korrelierte not exists Abfrage anstelle von not in verwenden. Hier

ist das gleiche mit not exists:

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

Wenn Sie wirklich verwenden Wildcard Matching wollen, ändern Sie die letztere Abfrage:

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

Gibt Ihnen nicht wirklich die Wildcard, wenn das OP nicht wirklich bedeutet, diese zu berücksichtigen? –

+1

@David T. Macknet: Sie haben Recht. Das habe ich vermisst. In diesem Fall müsste man "nicht vorhanden" verwenden. Ich füge das hinzu. –

+0

Ich bevorzuge die EXISTs, weil bei Verwendung von N, wenn es eine Möglichkeit von NULL gibt, es nicht Ihre beabsichtigten Ergebnisse gibt. Daher mag ich, dass Sie diese Antwort hinzugefügt haben, aber Ihre Wo-Anweisung verwendet immer noch nicht das Gleiche. 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