我有一个连接2个表的SQL SELECT语句 主表包含产品的misc信息,并连接到第二个尺寸表 第二个表包含一个存储为字符串的非数字大小列表,其结构简单如下......
SizeID =主键
SizeName =大小的字符串值(即小,中,大)
SizeOrder =用于对大小顺序进行排序的整数值(即,SizeOrder为5表示Size大于SizeOrder为2)
我需要SELECT语句从大小表中返回MIN()和MAX()大小 但是,由于实际大小存储为字符串,我需要针对SizeOrder列运行MIN()和MAX()函数,但返回SizeName列的值。
我目前的尝试如下:
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;
这将返回错误“不支持参考'MinSizeID'(对组功能的引用)”
答案 0 :(得分:3)
MySQL抱怨您在子选择中使用了列的别名,请尝试
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;
虽然我不确定是否会抱怨选择不在组中的列。
答案 1 :(得分:1)
您应该仅使用Size表中的SizeOrder字段执行整个查询,然后将结果与SizeName字段的Size表连接。