当我尝试在 sequel pro 中运行此查询时出现错误 [重复]

Posted

技术标签:

【中文标题】当我尝试在 sequel pro 中运行此查询时出现错误 [重复]【英文标题】:Getting an error when I try to run this query in sequel pro [duplicate] 【发布时间】:2020-01-28 05:41:32 【问题描述】:

我正在尝试构建一个查询,该查询返回来自两个连接表的最新消息。但是我在 group by 上遇到错误。也许我完全错误地接近它。

我知道在我当前的实现中我会得到一个列表,而不是最新的,但我至少想在开头看到最新的

SELECT m.message, m.created_at
FROM conversations c
JOIN messages m ON c.id = m.conversation_id
WHERE m.conversation_id = 5
GROUP BY m.created_at DESC;

这是错误: SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“tawkifydb.dm.message”;这与 sql_mode=only_full_group_by 不兼容

【问题讨论】:

我不了解 mysql,但在事务 SQL 中,DESC 进入 ORDER BY 错误信息是什么? (请为此编辑您的帖子) @Julian 对不起!我添加了错误 您需要一个聚合函数 dev.mysql.com/doc/refman/8.0/en/group-by-functions.html 用于 m-message a 或 group by 。最后的Furtehr DESC是错误的,它属于order by SELECT list is not in GROUP BY clause and contains nonaggregated column .... incompatible with sql_mode=only_full_group_by 的可能重复项您应该做的第一件事是对错误消息的相关部分进行基本搜索。我通过简单搜索 Expression #1 of SELECT list is not in GROUP BY 子句找到了重复项(以及许多其他项)。 【参考方案1】:

SELECT 列表的表达式 #1 不在 GROUP BY 子句中,并且包含在功能上不依赖于 GROUP BY 子句中的列的非聚合列“tawkifydb.dm.message”;这与 sql_mode=only_full_group_by 不兼容

SELECT 中的每一列都应该在 GROUP BY 中(或使用聚合)。该错误告诉 SELECT 中的 m.message,而不是 GROUP by(并且它不是聚合)中的 m.message

你需要这样的东西:

GROUP BY m.created_at, m.message
ORDER BY m.created_at DESC;

更新:我认为 DESC 也不应该在 GROUP BY 中,所以添加了一个 ORDER BY

【讨论】:

完美!当它允许我时我会接受 mysql 8/ Workbench 在这个位置不喜欢 DESC @nbk 认为你是对的,所以更新了帖子【参考方案2】:

您不需要join 表格。 conversations 表根本不需要:

SELECT m.message, m.created_at
FROM messages m
WHERE m.conversation_id = 5 AND
      m.created_at = (SELECT MAX(m2.created_at)
                      FROM messages m2
                      WHERE m2.conversation_id = m.conversation_id
                     );

或者,在这种情况下,因为你只想要一个对话一行,最简单的方法是:

SELECT m.message, m.created_at
FROM messages m
WHERE m.conversation_id = 5 
ORDER BY m.created_at DESC
LIMIT 1;

【讨论】:

以上是关于当我尝试在 sequel pro 中运行此查询时出现错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

我无法使用 Sequel Pro 连接到我的 Sail PHPMyAdmin

在 MAMP PRO 中运行 WP 主题时出现禁止错误

无法在报表生成器中选择多个值

Selenium.WebDriver - 当我尝试在 Chrome 中运行测试时出现错误

Sequelize如何在查询中比较日期的年份

在 Sequel Pro 中禁用严格模式