MySQL 语句 HAVING COUNT(*) < t.row - 包括空值

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

例子:

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

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

最佳答案

将 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 的任何值”。明确一点要好得多。

关于MySQL 语句 HAVING COUNT(*) < t.row - 包括空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560730/

相关文章:

sql - Hibernate HQL 相当于 Oracle 并行关键字

对多个表进行 SQL 联接,并根据条件筛选行

java - 导出 Jar 应用程序无法与 MySql 连接

mysql - Grails Hibernate 插入而不是更新表

PHP 无法在未经验证的情况下以数据库形式发送数据

mysql - 在 MySQL 中对多个数据运行相同 SELECT 的最简单方法

sql - 在 SQL 连接的情况下如何将 SQL 转换为关系代数?

android - SQLite 查询 : selecting the newest row for each distinct contact

php - 转置查询结果集

php - MYSQL中如何保存图片路径