SQL Feldpaare selektieren

hoctar

Erfahrenes Mitglied
Hallo :)
also meine Tabelle sieht so aus:

id|feld0|feld1| feld2|
1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 |
3 | 2 | 1 | 1 |
4 | 2 | 2 | 2 |
5 | 3 | 1 | 1 |

feld1 und feld2 bilden jeweils Feldpaare.

Selektiert möchte ich jetzte alles was
(feld1 = 1 UND feld2 = 1) UND (feld1 = 2 UND feld2 = 2)

rausbekommen müsste ich jetzt also id -> 1, 2, 3, 4

Meine Abfrage ist :

Code:
SELECT id 
    FROM tabelle
WHERE (feld1 = 1 AND feld2 = 1)
       AND (feld1 = 2 AND feld2 =2)

Leider bekomme ich ein leeres Ergebnis :(
 
Zuletzt bearbeitet:
Es muss in der Mitte ein OR sein, weil der Boolesche-Ausdruck auf jede Zeile angewendet wird.
Code:
SELECT id 
    FROM tabelle
WHERE (feld1 = 1 AND feld2 = 1)
       OR (feld1 = 2 AND feld2 =2)

Oder habe ich was falsch verstanden? Denn du sagst
rausbekommen müsste ich jetzt also id -> 1, 2, 3, 4
Aber id 5 müsste auch dabei sein.
 
Bei deinem Query würde aber 1,2,3,4,5 rauskommen.
Denn id 5 ist ja auch feld1 = 1 und feld2 = 1, aber nicht feld1 = 2 und feld2 = 2

EDIT:
also feld0 bildet das Paar was zussamengehört, aber ist erstma unwichtig, denn die abfrage geht theoretisch auch ohne feld0

EDIT2: sorry ich hatte ein Fehler, jetzt ist die tabelle richtig

id|feld0|feld1| feld2|
1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 |
3 | 2 | 1 | 1 |
4 | 2 | 2 | 2 |
5 | 3 | 1 | 1 |
 
Zuletzt bearbeitet:
Die Query von CPoly ist schon richtig. Sie würde die ID 1,2,3,5 als Ergebnis liefern.
Das Deine Abfrage ein leeres Ergebnis liefert ist doch klar,
schließlich kann weder feld1 noch feld2 in einem Datensatz sowohl den Wert 1 als auch den Wer 2 haben - logisch oder!?
 
Ich möchte nicht 1,2,3,5 sonder 1,2,3,4 und die Query von CPoly würde mir alle anzeigen. Das wäre auch okay würde ich noch ein sechstes Feld anlegen mit:
6|3|2|2

EDIT:

Also feld0 stellt immer die verbindung zu 2 Feldern sogesehen.

(1)Ein Paar:
1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 |

(2)Noch eins:
3 | 2 | 1 | 1 |
4 | 2 | 2 | 2 |

(3)Und noch eins:
5 | 3 | 1 | 1 |

Jetzt möchte 1 und 2 haben, denn schaut ma auf die letzten beiden werte, diese sind gleich.
Bei 3 eben nicht.
 
Zuletzt bearbeitet:
Ich weis nicht ob ich jetzt genau verstanden habe, wie es aussehen soll. Kommen die Werte in feld0 maximal 2 mal vor? Und wenn sie weniger als 2 mal da sind, wie im Fall von |5|3|1|1|, dann soll die Zeile ignoriert werden?

Nochmal: Es sollen alle Zeilen ausgegeben werden, welche eine Partnerzeile mit dem gleichen feld0-Wert haben?

Wenn das so ist, bastel ich schnell was mit einem Subquery zusammen. Ich teste das mal in HeidiSql.

Edit: Ich habe mal etwas rumgespielt
SQL:
SELECT id FROM paare GROUP BY feld0 HAVING COUNT(feld0)=2
oder
SELECT id FROM paare WHERE feld0 IN (SELECT feld0 FROM paare GROUP BY feld0 HAVING COUNT(feld0)=2);
 
Zuletzt bearbeitet:
Ich weis nicht ob ich jetzt genau verstanden habe, wie es aussehen soll. Kommen die Werte in feld0 maximal 2 mal vor? Und wenn sie weniger als 2 mal da sind, wie im Fall von |5|3|1|1|, dann soll die Zeile ignoriert werden?

ne ne

Also wenn ich z.B. sowas hier habe

1 | 1 | 1 | 1 |
2 | 1 | 2 | 2 |
3 | 1 | 3 | 4 |

4 | 2 | 1 | 1 |
5 | 2 | 3 | 2 |

dann stimmt nur eine kombination überein 1 und 4, weil beide am ende 1 | 1 haben.

Noch ein Beispiel:

1 | 1 | 1 | 1 |
2 | 1 | 9 | 2 |
3 | 1 | 3 | 4 |

4 | 2 | 1 | 1 |
5 | 2 | 3 | 4 |
6 | 2 | 8 | 7 |

hier stimmen ( 1 und 4 ) und ( 3 und 5 ) überein, weil id 1 die werte 1 | 1 hat und ebenso auch id 4 1 | 1 hat. So auch bei 3 und 5.

Aus dieser letzten Tabelle müsste ich also ID: 1, 3, 4, 5 bekommen.
 
SQL:
DELETE FROM paare;

INSERT INTO paare (id,feld0,feld1,feld2) VALUES
(1,1,1,1),
(2,1,2,2),
(3,1,3,4),
(4,2,1,1),
(5,2,3,2);

SELECT id FROM paare WHERE CONCAT(feld1,feld2) IN (SELECT CONCAT(feld1,feld2) AS foobar FROM paare GROUP BY foobar HAVING COUNT(foobar)=2);
Liefert: 1,4

SQL:
DELETE FROM paare;

INSERT INTO paare (id,feld0,feld1,feld2) VALUES
(1,1,1,1),
(2,1,9,2),
(3,1,3,4),
(4,2,1,1),
(5,2,3,4),
(6,2,8,7);

SELECT id FROM paare WHERE CONCAT(feld1,feld2) IN (SELECT CONCAT(feld1,feld2) AS foobar FROM paare GROUP BY foobar HAVING COUNT(foobar)=2);
Liefert: 1,3,4,5
 
Zuletzt bearbeitet:
Danke erstma für die vielen Antworten :)

HAVING 2 kann weg .. es können auch mehr als nur 2 sein.

Bei deinem Query würde bei folgendem Fall ein Fehler kommen.

1 | 1 | 2 | 34 |
2 | 2 | 23 | 4 |

Dies würde ein Paar ergeben, obwohl es eigentlich keins ist.

also

ID: 1 CONCAT(feld1, feld2) -> 234
ID: 2 CONCAT(feld1, feld2) -> 234
 
Die Feinheiten wirst du ja selbst hinbekommen. Mach das Concat einzigartig z.b. durch
SQL:
CONCAT(feld1,',',feld2)
 

Neue Beiträge

Zurück