MySQL错误代码:1055.SELECT列表的表达式#3不在GROUP BY>子句并包含非聚合列

时间:2018-01-31 02:34:56

标签: mysql mysql-error-1055

我有一个“聊天”表,记录两个人之间的聊天记录。让我们称第一个人为“发言人”,第二个人称为“接收者”。 当第一个人发送聊天消息时,他将成为“发言者”。接收消息的第二个人将是“接收者”。 当第二个人回应时,他将成为“发言者”,第一个收到回复的人将是“接收者”。

此查询适用于XAMPP(可能禁用ONLY_FULL_GROUP_BY):

SELECT sq.* FROM (
  SELECT speaker, receiver, message, status, date_sent
  FROM chat
  WHERE speaker = 10001
  UNION
  SELECT receiver, speaker, message, status, date_sent
  FROM chat
  WHERE receiver = 10001
  ORDER BY date_sent DESC
) AS sq
GROUP BY sq.speaker, sq.receiver
ORDER BY date_sent DESC

如果我有这个样本数据(当我运行简单的“SELECT * FROM chat”查询时产生):

speaker | receiver | message      | status | date_sent<br>
10001   | 10001    | how are you? | read   | 2018-01-30 07:30:15<br>
10002   | 10001    | fine, thanks | unread | 2018-01-30 07:32:43<br>
10001   | 10003    | hello dear   | read   | 2018-01-30 07:35:29<br>
10003   | 10001    | hello too!   | read   | 2018-01-30 07:36:01<br>
10001   | 10004    | hey!         | read   | 2018-01-30 07:36:38<br>
10001   | 10003    | how are you? | unread | 2018-01-30 07:37:24<br>

我得到了这个示例输出(我想要的输出):

speaker | receiver | message      | status | date_sent<br>
10002   | 10001    | fine, thanks | unread | 2018-01-30 07:32:43<br>
10001   | 10003    | how are you? | unread | 2018-01-30 07:37:24<br>
10001   | 10004    | hey!         | read   | 2018-01-30 07:36:38<br>

但是当我在我的Ubuntu PC上运行查询时(可能已启用ONLY_FULL_GROUP_BY),我收到此错误:

  

错误代码:1055。SELECT列表的表达式#3不在GROUP BY中   子句并包含非聚合列'sq.message',它不是   功能上依赖于GROUP BY子句中的列;这是   与sql_mode = only_full_group_by

不兼容

我可以使用什么替代查询来生成所需的输出?

1 个答案:

答案 0 :(得分:0)

我可能找到了答案。我想我可以在外部查询中做这样的事情:

SELECT speaker, receiver, GROUP_CONCAT(message),
GROUP_CONCAT(date_sent) FROM chat...

在这里得到答案:How to fix query group with only_full_group_by ...... - Bill Karwin回答。谢谢Frank AK的尝试。