SQL-使用Having子句运行Select查询
这是我想要运行的查询SQL-使用Having子句运行Select查询,sql,Sql,这是我想要运行的查询 SELECT COUNT(tableA.ID) FROM tableA NATURAL JOIN tableB NATURAL JOIN tableC WHERE tableB.Time IS NULL GROUP BY tableA.ID HAVING COUNT(tableA.ID) < tableC.Quantity 选择计数(表a.ID) 从表格 自然连接表B 自然连接表 其中tableB.Time为空 按表A.ID分组 有计数(表ID)
SELECT COUNT(tableA.ID)
FROM tableA
NATURAL JOIN tableB
NATURAL JOIN tableC
WHERE tableB.Time IS NULL
GROUP BY tableA.ID
HAVING COUNT(tableA.ID) < tableC.Quantity
选择计数(表a.ID)
从表格
自然连接表B
自然连接表
其中tableB.Time为空
按表A.ID分组
有计数(表ID)<表数量
如果没有HAVING
子句,此查询将运行得非常好,但是HAVING
子句有一个我无法识别的错误
HAVING
子句的目的是返回小于数量阈值(定义为table.Quantity
)的ID
如何修复当前的HAVING
子句,以合并查询只返回小于table.Quantity
的ID
注意:如果您需要更多的说明,我可以提供更多。我将假设错误的大意是
tableC.quantity
不在groupby
子句中(并且您没有使用MySQL)。如果是这样,可以使用聚合函数解决此问题:
SELECT COUNT(tableA.ID)
FROM tableA NATURAL JOIN
tableB NATURAL JOIN
tableC
WHERE tableB.Time IS NULL
GROUP BY tableA.ID
HAVING COUNT(tableA.ID) < max(tableC.Quantity);
选择计数(表a.ID)
从一个自然连接
表B自然连接
表C
其中tableB.Time为空
按表A.ID分组
具有计数(表ID)<最大值(表数量);
顺便说一下,我认为自然连接是一种危险的操作。您可以向表中添加一个新列并使所有查询无效,而不会显示错误消息。您说过要返回小于数量阈值的
ID
,但您没有选择ID
,而是选择了计数。你到底想要什么-计数,还是单个ID?对不起,我指的是小于该ID的数量阈值的ID计数。你和OP肯定也要选择实际的tableA.ID,否则计数将有点无意义(好吧,除非结果中只有一行)。啊,这是可行的。我不知道为什么max(表c.Quantity)有效,而不是表c.Quantity,但它有效。谢谢你。@Gerrat谢谢你的建议,但我有我的理由,谢谢你。