mysql - 在使用 JOIN 进行 GROUP BY 之前进行 ORDER BY

标签 mysql sql sql-order-by

我的 SQL 查询有问题。我想为用户显示最后一条消息。所以,我使用“GROUP BY”方法,但他不显示最后一条消息。

这是我的第一个查询:

SELECT `messages`.*, `conversations`.* 
FROM `messages` JOIN `conversations` ON `conversations`.`cNUM` = `messages`.`mCONV_NUM` 
WHERE `cUSER2` = '2' 
GROUP BY `messages`.`mCONV_NUMn`

我尝试关注这个主题:ORDER BY date and time BEFORE GROUP BY name in mysql (以及许多其他)

我有这个:

SELECT `messages`.*, `conversations`.* 
FROM (SELECT mTIME 
      FROM `messages` 
      ORDER BY mTIME desc) AS M 
JOIN `conversations` ON `conversations`.`cNUM` = `messages`.`mCONV_NUM` 
WHERE `cUSER2` = '2' 
GROUP BY `messages`.`mCONV_NUMn`

我有这个错误:表“消息”未知。

所以..我需要你们的帮助

最佳答案

您为消息表指定了别名 M,正如 isaace 所说,您应在查询的其余部分中将其称为“M”,因为此临时名称在整个查询期间持续存在,并且 FROM 是查询处理的初始阶段

We are talking about something called logical query processing, this means that in your query FROM statement is evaluated and processed initially and then the rest of query.

<小时/>

在 LQP 术语中,查询将按以下顺序处理。

  • 来自 --> 何处 --> 分组依据 --> 有 --> 选择 --> 排序依据

(当然我遗漏了一些阶段,但你明白了)

您还可以使用 LIMIT 来获取用户的最后一条消息。 只需在末尾添加 LIMIT 1 即可。

关于mysql - 在使用 JOIN 进行 GROUP BY 之前进行 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48323396/

相关文章:

SQL 'WHERE NOT some condition' 不排除条件

mysql - Heroku PG错误: group by needs created at

php - 根据 ID 对 Foreach 循环进行排序

php - 如何优化这个 mysql 查询?在 nginx 和 fastcgi 上

c# - Linq to Sql - 具有多个连接的不同项目的查询列表

sql - sql relay安装失败

mysql - 当值为 '2"%' 时,使用 postgresql 中的副本时出错

MySQL按两列排序,限制在一个列上

sql - 对于 SQL,如何使用 group by 两次但仅在第二组内按 sum() 排序

sql - Oracle 子查询前 1 个结果