Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-使用Having子句运行Select查询_Sql - Fatal编程技术网

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谢谢你的建议,但我有我的理由,谢谢你。