此查询中的MySQL语法有什么问题?

时间:2020-10-21 12:37:31

标签: mysql sql

在名为“ 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'

我在做什么错了?

2 个答案:

答案 0 :(得分:2)

使用WHERE,而不是HAVING

SELECT C.vendorName
FROM Component C
WHERE endOfLifeDate = '4/30/2024'
GROUP BY C.vendorName;

HAVINGGROUP 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' ;