Webstatt.org - Community seit 2006 - 2012 (2024?)

Subselect / Subquery (dringend)

Avatar user-287
09.10.2007 10: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.

Avatar user-194
09.10.2007 15: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"zwinkern.

Avatar user-287
09.10.2007 17: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?

Avatar user-287
13.10.2007 12: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)

Avatar user-287
17.10.2007 16: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.

Avatar user-236
17.10.2007 16: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

signature in progress