mysql - 通过具有 : SQLite vs MySQL 进行分组

标签 mysql sql sqlite group-by having

出于某种原因,MySQL 不接受以下查询:

SELECT `tasks`.* FROM `tasks` INNER JOIN `task_status_updates` ON `task_status_updates`.`task_id` = `tasks`.`id` GROUP BY task_status_updates.task_id HAVING `task_status_updates`.`status` = 0

然而,在 SQLite 中运行完全相同的查询会产生预期的结果(最后一个 task_status_update 的状态为 0task 列表)。这个错误只是发生在Rails的生产环境上,因为SQLite和MySQL的差异。

MySQL 抛出以下错误:

ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'task_status_updates.status' in 'having clause'

有人能解释一下为什么上面的语句在 MySQL 中无效,以及如何以 MySQL 可以理解的方式获得想要的结果?

最佳答案

在任何 SQL 引擎上,此 SQL 都不会生成最后任务状态更新状态为 0 的任务列表。相反,它将生成任何任务列表em> 任务状态更新的状态为 0。

此外,这是 GROUP BY 的一种非常不标准的用法。 SQlite 和 MySQL 都支持在结果集中使用非聚合列,但标准 SQL 不支持。您可能想要的是 DISTINCT 而不是 GROUP BY,但这对您原来的问题没有帮助,即任何状态 0 都将包含在结果集中,而不仅仅是最近的状态更新。 p>

HAVING 在 MySQL 中不起作用的原因是您的结果集仅包含来自 tasks 的列,结果集中没有 task_status_updates.tasks 字段应用 HAVING 过滤器。真正的问题是为什么它在 SQlite 中有效?我不能说。

关于mysql - 通过具有 : SQLite vs MySQL 进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35606186/

相关文章:

linux - SQLite 数据库构建加速

Android SQLite "0 _id"在 select 语句中

PHP/MySQL 忽略小数点右边的数字

php - 如何从 mySQL 数据库表中获取具有特定答案的数据到 php 输出中

sql - 从查询窗口中,可以在另一个查询窗口中打开存储过程吗?

sql - jdbcTemplate 和原始 JSON 列

sql - PostgreSQL CASE 语句

MySQL 默认字符集和排序规则

mysql - MySQL 数据库中使用的 VARCHAR(MAX) 与 TEXT 与 .txt 文件

java - SQLite : Unique makes my database go crazy