Willkommen in der Webstatt Zum Webstatt Blog und Stories
Rebel4s Rebel4s am 09.10.07 12:15

Hallo,
Ich habe folgende Abfrage:
SELECT userlicences.userlicenceid,
max(versions.majorrelease) as maxmajorrelease,
max(versions.minorrelease) as maxminorrelease
FROM `userlicences`
LEFT JOIN `user` ON (userlicences.customer_number = user.customer_number)
LEFT JOIN `licences` ON (userlicences.licenceid = licences.licenceid)
LEFT JOIN `versions` ON (licences.productid = versions.productid AND (licences.endurance = -1 OR versions.released < (userlicences.dayofpurchase + licences.endurance)))
LEFT JOIN `products` ON (licences.productid = products.productid)
GROUP BY userlicences.userlicenceid
ORDER BY userlicences.userlicenceid ASC


Soweit funktioniert sie auch. Nun will ich dort aber ein Subquery reinpacken und in diesem Subquery will ich auf die spalten maxmajorrelease und maxminorrelease zugreifen, nur dann sagt er mir immer, dass da was mit den Referenzen oder so nicht stimmt.

Also das Subquery würd dann so aussehen (geht abe rnicht):
SELECT `versionid` FROM `versions` WHERE `majorrelease` = maxmajorrelease AND `minorrelease` = maxminorrelease ORDER BY patchlevel DESC, buildnumber DESC LIMIT 1


Ich hoffe ihr versteht mein Problem.

netcup.de Warum gibt es hier Werbung?
hoffie hoffie am 09.10.07 17:34

Ich bin kein (My)SQL-Ass, aber ich glaub zum Debuggen wärs sinnvoll, wenn du das Query so postest, wie du es probiert hast (also inkl. Subquery) und außerdem die genaue Fehlermeldung (nicht: "sagt er dann").

Rebel4s Rebel4s am 09.10.07 19:43

Das Problem ist ja, dass ich mich mit Subquerys nicht auskenn und garnicht weiß, was man da so beachten muss. Wie kann man denn in nem Subquery Felder aus der normalen Abfrage verwenden, geht das überhaupt?

Rebel4s Rebel4s am 13.10.07 14:08

Also,
ich hab z.B. folgenden Query mit Subquery:
SELECT ul1.userlicenceid,
max(v1.majorrelease) as maxmajorrelease,
max(v1.minorrelease) as maxminorrelease,
(SELECT v2.versionid FROM versions as v2 WHERE v2.majorrelease = max(v1.minorrelease) LIMIT 1) as test
FROM `userlicences` as ul1
LEFT JOIN `user` as u1 ON (ul1.customer_number = u1.customer_number)
LEFT JOIN `licences` as l1 ON (ul1.licenceid = l1.licenceid)
LEFT JOIN `versions` as v1 ON (l1.productid = v1.productid AND (l1.endurance = -1 OR v1.released < (ul1.dayofpurchase + l1.endurance)))
LEFT JOIN `products` as p1 ON (l1.productid = p1.productid)
GROUP BY ul1.userlicenceid
ORDER BY ul1.userlicenceid ASC


SUbquery:
(SELECT v2.versionid FROM versions as v2 WHERE v2.majorrelease = max(v1.minorrelease) LIMIT 1)
Und da sacht er mir:
Invalid use of group function

Wenn ich jetzt den alias maxmajorrelease statt max(v1.majorrelease) verwende sagt er mir
Reference 'maxmajorrelease' not supported (reference on group function)

Rebel4s Rebel4s am 17.10.07 18:23

Problem wurde durch eine zweite Abfrage gelöst, nicht sehr schön, aber es funktioniert.

Wenn einer irgendwann weiß, wie man ein alias von einer "Group Funktion" in nem Subquery benutzt würd ich mich freuen.

mab mab am 17.10.07 18:36

vielleicht hast du nur ein select vor der gruppierung vergessen. schon bei google geschaut: z.B.: http://www.comp.nus.edu.sg/~ooibc/courses/sql/dml_query_subquery.htm

Creative Commons Lizenzvertrag
Alle Inhalte des Webstatt-Archivs stehen unter einer Creative Commons Namensnennung - Weitergabe unter gleichen Bedingungen 3.0 Unported Lizenz.

Impressum & Kontakt