MySQL语句有COUNT(*)< t.row - 包括Nulls

时间:2012-05-12 03:04:42

标签: mysql sql

我目前正试图让以下声明发挥作用:

SELECT t1.id, t1.row2
FROM table1 t1
JOIN table2 t2 ON t1.rowx = t2.rowx
JOIN table3 t3 ON t2.rowy = t3.rowy
GROUP BY t1.row2
HAVING COUNT(t2.rowx) < t3.maximum_size

该语句可以工作并提供输出,但是很多t3.maximum_size字段都是NULL,这会阻止语句按预期工作。

有没有办法让COUNT(*)&lt; another_number包括NULL值?

示例:

10 < 20 // true
20 < 20 // false
18 < null // true (as null represents no maximum size in my query)

(我确实检查了其他有关问题的SO问题,但我没有看到有人帮助完成这项具体任务 - 如果我错过了一个,请指出我正确的方向。)

3 个答案:

答案 0 :(得分:2)

将having子句更改为:

Having count(t2.rowx) < t3.maximum_size or t3.maximum_size is null

回想起来,更好的SQL答案是:

Having count(t2.rowx) < max(t3.maximum_size) or max(t3.maximum_size) is null

原始语法适用于mysql,但不适用于大多数数据库。另外,我认为它是错误的SQL。在聚合上下文中引用时,“t3.maximum_size”的使用实际上等同于“t3.Maximum_Size的任何值”。明确要好得多。

答案 1 :(得分:1)

我认为您还需要汇总t3.maximum_size

HAVING COUNT(t2.rowx) < MAX(t3.maximum_size)

答案 2 :(得分:1)

可能你可以使用NVL


HAVING COUNT(t2.rowx) < NVL(t3.maximum_size, 0)

这意味着如果t3.maximum_size以NUll的形式返回,则匹配将以ZERO完成

希望有所帮助