2009-08-18 8 views
2

J'ai une instruction SQL SELECT joignant 2 tables.
La table principale contient des informations diverses sur un produit et est jointe à une deuxième table de tailles.
La deuxième table contient une liste des formats non numériques stockés comme une chaîne et est tout simplement structuré comme suit ...MySQL: MIN() et MAX() contre une valeur de chaîne

SizeID = clé primaire
SizeName = Valeur de chaîne de taille (c.-à-Small, Medium, Large)
SizeOrder = valeur entière pour trier l'ordre de tailles (ie a SizeOrder 5 signifierait la taille était plus grand qu'un SizeOrder de 2)

J'ai besoin l'instruction SELECT pour retourner le MIN() et MAX() tailles de la table des tailles.
Cependant, comme la taille réelle est stockée sous forme de chaîne, j'ai besoin d'exécuter les fonctions MIN() et MAX() par rapport à la colonne SizeOrder, mais retourner la valeur de la colonne SizeName.

Ma tentative actuelle est la suivante:

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; 

Cela renvoie l'erreur « Référence « MinSizeID » non pris en charge (référence à la fonction de groupe) »

Répondre

3

MySQL se plaint de votre utilisation de de l'alias de les colonnes dans les sous-requêtes, essayez

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; 

bien que je ne suis pas sûr si cela va se plaindre de la sélection des colonnes pas dans le groupe par.

+0

Je pense que comme vous l'attendiez peut-être, votre suggestion renvoie une erreur indiquant "Utilisation invalide de la fonction de groupe" – ticallian

+0

Ce n'est pas exactement ce à quoi je m'attendais. C'est peut-être parce que le MIN (SizeOrder) qui nous intéresse n'est pas le SizeOrder, j'essayerais de qualifier le SizeOrder dans les sous-sélections, comme ceci: WHERE SizeOrder = MIN (Products.SizeOrder) et la même chose pour MAX(). –

+0

Qui malheureusement génère la même erreur "Utilisation invalide de la fonction de groupe" – ticallian

1

Vous devez effectuer toute la requête à l'aide des champs SizeOrder uniquement à partir de la table Size, puis joindre le résultat avec la table Size pour les champs SizeName.

Questions connexes