2016-09-28 6 views
1

Ich habe eine Tabelle, wie untenMysql - Wie alle Elemente abrufen, die kein bestimmtes Attribut haben?

id  key  value section 
 
----------------------------------- 
 
CT1 | A | 25 | M-2 
 
CT1 | B | 35 | M-1 
 
CT2 | A | 70 | M-1 
 
CT2 | C | 30 | M-2 
 
CT2 | D | 20 | M-3 
 
CT3 | B | 40 | M-2 
 
CT3 | A | 15 | M-1 
 
CT4 | B | 25 | M-1 
 
CT4 | D | 25 | M-2

Ich brauche einen Weg, um alle IDs zurück, die nicht bestimmten Schlüssel besitzt. Zum Beispiel:

Ids, die nicht haben 'D': CT1, CT3,

Ist es möglich, dieses Ergebnis aus einer MySQL-Abfrage zu holen? Ich habe auch nach früheren Fragen gesucht. Konnte nichts in der Nähe finden.

Antwort

3

können Sie verwenden, um mit einer HAVING Klausel Gruppierung:

SELECT id 
FROM mytable 
GROUP BY id  
HAVING COUNT(CASE WHEN key = 'D' THEN 1 END) = 0  
+0

COUNT (key = 'D') = 0 'klingt leichter – Xenos

+0

@Xenos, die gewohnt –

+1

@NeverBackDown Ops arbeiten, Sorry, ich meinte 'SUM (keys = 'D') = 0' da ja, 'COUNT (keys = 'D')' würde fehlschlagen, weil 'COUNT' "non-NULL values" zählt http://dev.mysql.com/doc/ refman/5.5/de/group-by-functions.html # function_count – Xenos

0

SELECT ID FROM Yourtable WHERE KEY NICHT IN (SELECT-Taste von Yourtable)

-1

Sie die NOT-Klausel WHERE verwenden können. Werfen Sie einen Blick auf dieses Beispiel, greift dies alles, wenn der Wert nicht 25.

select * from table where not value=25 
0

ist Mit

SELECT id FROM table GROUP BY id HAVING count(key in ('D'))=0 

Sie können einige Elemente der Liste ändern oder fügen Sie eine oder mehrere IDs auszuschließen.

+1

Dies wird 'CT1' zurückgeben, da sein Schlüssel' A' ist, was nicht 'D' ist – Xenos

0

Die NICHT-Methode würde wie folgt aussehen:

SELECT id 
FROM mytable 
WHERE id NOT IN 
(SELECT id 
FROM mytable 
WHERE key = 'D') 
Verwandte Themen