2016-07-24 5 views
1

Ich habe eine solche Abfrage SELECT col1, col2 FROM t WHERE col1>1645 AND (col2=5 OR col2=7 OR col2=9) und ich möchte alle Zeilen, wo für einen bestimmten Wert von col1 alle Werte durch die Bedingung auf col2 vorhanden sind, erhalten . Also e. G. Aus diesen AufzeichnungenMySQL Zeilen auswählen, wo zwei Spaltenwerte mindestens einmal basierend auf einer Bedingung

1700, 5 
1700, 7 
1700, 8 
1700, 9 

3 wird während der folgenden Willen keine gewählt werden, weil col2 = 7

1800, 4 
1800, 5 
1800, 6 
1800, 9 

Antwort

2

Hmmm fehlt, ich denke, das ein bisschen schwierig ist. Die Idee ist, die col1 Werte zu finden, die alle drei Werte für col2 haben. Fragen Sie dann die Tabelle ab, um die übereinstimmenden Werte col1 und col2 zu erhalten.

SELECT t.* 
FROM t 
WHERE t.col2 IN (5, 7, 9) AND 
     t.col1 IN (SELECT col1 
       FROM t 
       WHERE col1 > 1645 AND col2 IN (5, 7, 9) 
       GROUP BY col1 
       HAVING COUNT(DISTINCT col2) = 3 
       ); 
0

Vielleicht vermisse ich deine Frage zu verstehen, aber ist das, was du fragst? :

Select * from T INNER JOIN 
(
    select Col1 , Count(Distinct Col2) as Check_All_Values From T 
    Where T.Col2 in (5,7,9) 
    Group by Col1 
    Having Count(Distinct Col2) = 3 
) B 
ON T.id = B.id 
WHERE T.Col2 in (5,7,9) 
+0

Dies wird keine Ergebnisse zurückgeben. Wie kann 'col2' einem anderen Wert in derselben Zeile entsprechen? – sgeddes

+0

@ Sgeddes Recht :) – pedmillon

+0

lol ... bearbeitet die Antwort ... sehen, ob das funktioniert – objectNotFound

Verwandte Themen