1

我目前正在尝试使以下语句起作用:

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(*)<another_number包含NULL值?

例子:

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

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

4

3 回答 3

2

将have子句更改为:

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 的任何值”。最好是明确的。

于 2012-05-12T03:10:16.410 回答
1

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

HAVING COUNT(t2.rowx) < MAX(t3.maximum_size)
于 2012-05-12T03:13:48.857 回答
1

也许你可以使用 NVL


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

这意味着如果 t3.maximum_size 返回为 NUll,则匹配将使用零完成

希望能帮助到你

于 2012-05-12T04:30:04.107 回答