SQL - 使用子句运行选择查询

时间:2014-05-21 00:44:05

标签: 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

此查询将完全正常运行而不需要 HAVING子句,但是HAVING子句有一个我无法选择的错误。

HAVING子句的目的是我想返回小于数量阈值的ID's(定义为tableC.Quantity)。

如何修复当前的HAVING子句以合并查询只返回小于ID's的{​​{1}}。

注意:如果您需要更多说明,我可以提供更多信息。

1 个答案:

答案 0 :(得分:2)

我将假设错误是tableC.quantity不在group by子句中(并且您没有使用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);

顺便说一句,我认为natural join是一项危险的行动。您可以向表中添加新列并使所有查询无效,而不会显示错误消息以告诉您出现了什么问题。