2017-09-02 3 views
0

Ich muss verschiedene Elemente einer Spalte extrahieren, indem Sie zwei Bedingungen für eine andere Spalte verwenden. Zum Beispiel:SQL: Wählen Sie mit zwei Bedingungen für eine Spalte

c1 | c2 
--------- 
u | a 
v | b 
w | c 
x | a 
x | b 
x | c 
y | a 
y | c 

Ich mag, dass die Einträge von c1, wenn c2 'a' enthalten, aber nicht 'b'. Die zurückgegebenen Namen sollten "u" und "y" sein.

Jede Hilfe wird geschätzt, danke.

+1

Haben Sie schon etwas probiert? Stack Overflow ist kein kostenloser Hausaufgabenservice. –

+0

Ich habe versucht "SELECT DISTINCT c1 aus der Tabelle WHERE c2 = 'a' UND c2! = 'B'", schneiden und ein paar andere Methode. Es hat nicht funktioniert ... –

+0

Ich stimme zu, das riecht nach Hausaufgaben, aber es war einfach faszinierend genug, dass ich sowieso eine Antwort anbot. –

Antwort

3

Vielleicht sind die konzeptionell einfachsten Möglichkeiten, dies zu tun wäre auf der c1 Spalte aggregieren und behaupten nur, dass a vorhanden ist und b nicht vorhanden ist:

SELECT c1 
FROM yourTable 
GROUP BY c1 
HAVING 
    SUM(CASE WHEN c2 = 'a' THEN 1 ELSE 0 END) > 0 AND 
    SUM(CASE WHEN c2 = 'b' THEN 1 ELSE 0 END) = 0 
+0

Vielen Dank, es kam nie zu mir, dass Fall zu verwenden, um es in ein anderes Feature abzubilden. –

0
SELECT DISTINCT t.c1 
FROM table as t 
WHERE 
t.c2 LIKE '%a%' 
AND NOT t.c2 LIKE '%b%' 
1

Dies ist nicht etwas, das SQL Hervorragend, so ist es ein bisschen klobig. Diese naive Implementierung ist ziemlich vanilla und sollte unter den meisten Dialekten mit wenig Modifikation funktionieren.

In DB2 müssen Sie möglicherweise "mit ur" zur inneren Abfrage hinzufügen, um Sperren zu verhindern.

select c1 from yourtable 
where c2 = 'a' 
    and c1 not in (
    select c1 from yourtable where c2 = 'b' 
) 
Verwandte Themen