GroupBy??
hawkmaster1
- mysql
Hallo zusammen,
ich habe eine relativ umfangreiche Select Abfrage (mySQL)
SELECT
A.id, A.number, B.customerid, B.customername, C.spalte3, C.statusid, DATE_FORMAT(C.start,'%d.%m.%Y') AS datumstart,D.vname, E.Abtname, F.statusname,G.description
From
FROM
tabelle1 A
JOIN
tabelle2 B ON B.customerid = A.customerid
JOIN
tabelle3 C ON C.xxid = A.xxid
JOIN
tabelle4 D ON D.yyid = B.yyid
JOIN
tabelle5 E ON E.qqid = B.qqid
JOIN
tabelle6 F ON F.vvid = C.vvid
LEFT JOIN
tabelle7 G ON G.itnumber = C.itnumber
Obiger Code ist nur ein Beispiel: Das Problem ist. in der letzten Tabelle 7 kann es mehrere Einträge geben. Ich möchte jedoch in der Ergebnis Anzeige immer nur eine Zeile. Man könnte jetzt zwar am Schluss ein
GROUP BY C.itid machen (das wäre der autoincrement bzw. eindeutige Wert von Tabelle C) Aber richtiges gültiges SQL wäre das ja nicht. Nur MySQL erlaubt das ja.
Würde es eine andere Lösung geben?
vielen Dank
Gruss hawk
Hallo,
Man könnte jetzt zwar am Schluss ein
GROUP BY C.itid machen (das wäre der autoincrement bzw. eindeutige Wert von Tabelle C) Aber richtiges gültiges SQL wäre das ja nicht. Nur MySQL erlaubt das ja.
??? Wäre mir neu. GROUP BY ist doch Teil des SQL92-Standards
Viele Grüße, Jörg
Hallo,
??? Wäre mir neu. GROUP BY ist doch Teil des SQL92-Standards
Ich nochmal. Sorry, mein Fehler, sehe jetzt erst, dass Du nicht auf GROUP BY an sich beziehst, sondern darauf, dass Du in Deinem Select Felder hast, die Du nicht im GROUP BY stehen hast. Dies kann tatsächlich nur MySQL.
Tach!
Das Problem ist. in der letzten Tabelle 7 kann es mehrere Einträge geben. Ich möchte jedoch in der Ergebnis Anzeige immer nur eine Zeile.
Ist es wirklich eine ganze Zeile, also mehrere Werte oder soll da nur ein einzelner Wert abgefragt werden? In dem Beispiel wird ja von G nur Description benötigt. Das wäre also ein einzelner Wert. Dann kannst du statt des Joins eine Correlated Subquery verwenden. Wenn allerdings mehr Felder als nur Description in die Ausgabe sollen, dann geht das so nicht und ich wüsste grad auch nicht, wie das geht. Es sei denn, du kannst in der JOIN-Bedingung einen Ausdruck finden, der die Datensätze auf einen reduziert.
Andererseits kannst du in dem Fall auch die MySQL-Gutmütigkeit ausnutzen. Die Daten der anderen Tabellen werden durch den Join ja nur vervielfacht und daraus dann einen wählen kommt immer auf dieselben Daten raus. Probleme ergeben sich ja nur dann, wenn Datensätze unterschiedlichen Inhalts per Group-By zusammengefasst werden sollen.
dedlfix.