在名为“ Component”的表中,我试图查询具有“ LifecycleStatus”为Active且带有特定“ EndOfLifeDate”的项目。
这是我桌子的描述。
mysql> describe component;
+-----------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+--------------+------+-----+---------+-------+
| componentID | varchar(20) | NO | PRI | NULL | |
| vendorName | varchar(255) | YES | | NULL | |
| Family | varchar(100) | YES | | NULL | |
| cdescription | varchar(255) | YES | | NULL | |
| CategoryType | varchar(255) | YES | | NULL | |
| endOfSaleDate | varchar(20) | YES | | NULL | |
| endOfLifeDate | varchar(20) | YES | | NULL | |
| LifeCycleStatus | varchar(20) | YES | | NULL | |
+-----------------+--------------+------+-----+---------+-------+
8 rows in set (0.00 sec)
这是我的错误查询。
mysql> SELECT C.vendorName
-> FROM Component C
-> GROUP BY C.LifecycleStatus
-> HAVING EndOfLifeDate = '4/30/2024' ;
ERROR 1054 (42S22): Unknown column 'EndOfLifeDate' in 'having clause'
我在做什么错了?
答案 0 :(得分:2)
使用WHERE
,而不是HAVING
:
SELECT C.vendorName
FROM Component C
WHERE endOfLifeDate = '4/30/2024'
GROUP BY C.vendorName;
HAVING
在GROUP BY
之后评估 ,因此它只能使用具有聚合功能的GROUP BY
键和表达式。
注意:这也可以修复GROUP BY
,使其与SELECT
列匹配。
然后,修复您的数据模型。您不应该将日期存储为字符串。它们应存储为date
。这就是数据类型的目的。
答案 1 :(得分:0)
您的查询:
mysql> SELECT C.vendorName
-> FROM Component C
-> GROUP BY C.LifecycleStatus
-> HAVING EndOfLifeDate = '4/30/2024' ;
ERROR 1054 (42S22): Unknown column 'EndOfLifeDate' in 'having clause'
HAVING适用于您选择的列或应用分组依据的列。
您可以尝试一下,
mysql> SELECT C.vendorName , C.EndOfLifeDate
-> FROM Component C
-> GROUP BY C.LifecycleStatus
-> HAVING C.EndOfLifeDate = '4/30/2024' ;