hawkmaster1: GroupBy??

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

  1. 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

    1. 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.

  2. 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.