2009-08-18 11 views
2

Ich habe eine SQL SELECT-Anweisung, die 2 Tabellen verbindet.
Die Haupttabelle enthält verschiedene Informationen zu einem Produkt und ist mit einer zweiten Tabelle mit Größen verknüpft.
Die zweite Tabelle enthält eine Liste von nicht-numerischen Größen enthält als String gespeichert und wird einfach wie folgt strukturiert ...MySQL: MIN() und MAX() gegen einen String-Wert

SizeID = Primärschlüssel
SizeName = String Wert der Größe (dh Small, Medium, Large)
SizeOrder = Integer-Wert, die Reihenfolge der Größen zu sortieren (dh A SizeOrder von 5 würde die Größe bedeuten, war größer als ein SizeOrder von 2)

ich brauche die Anweisung SELECT MIN() und MAX zurückzukehren() Größen aus der Tabelle der Größen.
Da die tatsächliche Größe jedoch als Zeichenfolge gespeichert wird, muss ich die Funktionen MIN() und MAX() für die SizeOrder-Spalte ausführen, aber den Wert der SizeName-Spalte zurückgeben.

Mein aktueller Versuch ist wie folgt:

SELECT ProductReference, MIN(SizeOrder) AS MinSizeID, MAX(SizeOrder) AS MaxSizeID, 
(SELECT SizeName FROM Size WHERE SizeOrder = MinSizeID) AS MinSizeText, 
(SELECT SizeName FROM Size WHERE SizeOrder = MaxSizeID) AS MaxSizeText 
FROM (Product INNER JOIN Size ON Products.SizeFK = StoneSize.SizeID) 
WHERE ID = 132 
GROUP BY ProductReference; 

Diese den Fehler zurückgibt „Reference‚MinSizeID‘nicht unterstützt (zum Gruppenfunktion Referenz)“

Antwort

3

MySQL über Ihre Verwendung des Alias ​​klagt über die Spalten in der Subselects, versuchen

SELECT ProductReference, MIN(SizeOrder) AS MinSizeID, MAX(SizeOrder) AS MaxSizeID, 
(SELECT SizeName FROM Size WHERE SizeOrder = MIN(Products.SizeOrder)) AS MinSizeText, 
(SELECT SizeName FROM Size WHERE SizeOrder = MAX(Products.SizeOrder)) AS MaxSizeText 
FROM (Products INNER JOIN Size ON Products.SizeFK = StoneSize.SizeID) 
WHERE ID = 132 
GROUP BY ProductReference; 

obwohl ich nicht sicher bin, ob das durch über die Auswahl von Spalten nicht in der Gruppe beschweren.

+0

Ich denke, wie Sie vielleicht erwartet haben, gibt Ihr Vorschlag einen Fehler "Ungültige Verwendung der Gruppenfunktion" – ticallian

+0

Das ist nicht genau das, was ich erwartet hatte. Das könnte daran liegen, dass die MIN (SizeOrder), an der wir interessiert sind, nicht die SizeOrder ist. Ich würde versuchen, die SizeOrder in den Subselects zu qualifizieren, wie zum Beispiel: WHERE SizeOrder = MIN (Products.SizeOrder) und dasselbe für MAX(). –

+0

Das erzeugt leider die gleiche "Ungültige Verwendung der Gruppenfunktion" Fehler – ticallian

1

Sie sollten die gesamte Abfrage mit den SizeOrder-Feldern nur aus der Size-Tabelle ausführen und dann das Ergebnis mit der Size-Tabelle für die SizeName-Felder verknüpfen.