JOIN den ich nicht hinbekomme
Mama
- datenbank
Hallo Forum
Ich hab irgendwie ein Denkproblem in Bezug auf MySQL,
Joins und Group Bys.
Es sind zwei Tabellen vorhanden (Tabelle_1 und Tabelle_2).
Tabelle_2 ist über "Tabelle_1_id" mit Tabelle_1 verknüpft.
Mein Query sollte alle Datensätze aus Tabelle_1 zurückliefern,
bei dem es heißt, daß ALLE Statuswerte für Tabelle_1 über den
Wert 5 liegen. (Also nur der Datensatz mit der ID = 3)
Mit meinen bisherigen Versuchen, erhalte ich aber logischerweise
auch die Datensätze zurück, bei dem mind. einer der Statuswerte
über 5 liegen.
Meine bisherige Abfrage:
SELECT *
FROM Tabelle_1
LEFT JOIN Tabelle_2 ON (Tabelle_1.id = Tabelle_2.Tabelle_1_id )
WHERE Tabelle_2.status>5
Auch ein Group By hat bisher nichts bewirkt.
Ich hab zwar schon versucht in einigen MySQL-Docs was dazu zu finden - aber erstmal
wissen, wonach man jetzt suchen müsste.
Hat irgendjemand 'n Lösungsansatz oder zumindest einen Hinweis, wonach ich suchen sollte?
Gruß,
Mama
PS: Ich nutze hier MySQL 5.0.37 auf einem WindowsServer 2003.
Tabelle_1
+----+---------------------+
| id*| weitere Felder |
+----+---------------------+
| 1 | Infos |
| 2 | Infos |
| 3 | Infos |
+----+---------------------+
Tabelle_2
+----+--------------+--------+
| id*| Tabelle_1_id | status |
+----+--------------+--------+
| 1 | 1 | 0 |--|
| 2 | 1 | 1 |--|
| 3 | 1 | 2 |--|
| 4 | 1 | 3 |--|
| 5 | 1 | 3 |---> Kein Statuswerte über 5
| 6 | 2 | 6 |--|
| 7 | 2 | 6 |--|
| 8 | 2 | 6 |--|
| 9 | 2 | 7 |--|
| 10 | 2 | 0 |---> Nicht alle Statuswerte über 5
| 11 | 3 | 6 |--|
| 12 | 3 | 7 |--|
| 13 | 3 | 6 |--|
| 14 | 3 | 7 |--|
| 15 | 3 | 7 |---> Alle Statuswerte über 5!
+----+--------------+--------+
* = Primary
Hi,
Es sind zwei Tabellen vorhanden (Tabelle_1 und Tabelle_2).
Tabelle_2 ist über "Tabelle_1_id" mit Tabelle_1 verknüpft.Mein Query sollte alle Datensätze aus Tabelle_1 zurückliefern,
bei dem es heißt, daß ALLE Statuswerte für Tabelle_1 über den
Wert 5 liegen. (Also nur der Datensatz mit der ID = 3)Mit meinen bisherigen Versuchen, erhalte ich aber logischerweise
auch die Datensätze zurück, bei dem mind. einer der Statuswerte
über 5 liegen.Meine bisherige Abfrage:
SELECT *
FROM Tabelle_1
LEFT JOIN Tabelle_2 ON (Tabelle_1.id = Tabelle_2.Tabelle_1_id )
WHERE Tabelle_2.status>5Auch ein Group By hat bisher nichts bewirkt.
Ich hab zwar schon versucht in einigen MySQL-Docs was dazu zu finden - aber erstmal
wissen, wonach man jetzt suchen müsste.Hat irgendjemand 'n Lösungsansatz oder zumindest einen Hinweis, wonach ich suchen sollte?
Leider kann ich dir nicht konkret sagen, was du machen musst, aber du brauchst wohl "GROUP BY Tabelle_1_id" und "MIN(status)".
MIN(status) ist dann der kleinste status zu einer id, jedoch weiss ich nicht, wie dann die where-Klausel aussehen muss.
Ich haette gedacht "WHERE MIN(status) > 5", aber das funktioniert so leider nicht.
Aber vielleicht findest du ja in der Doku zu MIN() was darueber.
mfG,
steckl
Vielen Dank
Leider kann ich dir nicht konkret sagen, was du machen musst, aber du brauchst wohl "GROUP BY Tabelle_1_id" und "MIN(status)".
Genau das war's.
Hab es so gelöst:
SELECT *, MIN(status) AS MINSTATUS
FROM Tabelle_1
LEFT JOIN Tabelle_2 ON (Tabelle_1.id = Tabelle_2.Tabelle_1_id)
WHERE 1 GROUP BY id HAVING MINSTATUS>5
Dabei hab ich sogar schon MIN() mal benutzt - aber manchmal hat man wohl einfach n Brett vor'm Kopp!
Es dankt,
die Mama
Hi,
Hab es so gelöst:
SELECT *, MIN(status) AS MINSTATUS
FROM Tabelle_1
LEFT JOIN Tabelle_2 ON (Tabelle_1.id = Tabelle_2.Tabelle_1_id)
WHERE 1 GROUP BY id HAVING MINSTATUS>5
Das "WHERE 1" kannst du auch weglassen.
mfG,
steckl
Hi,
Das "WHERE 1" kannst du auch weglassen.
Danke :) - aber durch Copypasta entstanden - mein DB-Klässchen benötigt mind. den String "1" als Where-Klausel.
Copypasta
Klingt nach Spaghetticode ;-)
Copypasta
Klingt nach Spaghetticode ;-)
DER war gut :)