带有连接和多个分组的 SQL 查询

Posted

技术标签:

【中文标题】带有连接和多个分组的 SQL 查询【英文标题】:SQL query with joins and multiple group by 【发布时间】:2016-10-20 17:09:41 【问题描述】:

我有表格消息:

我想重新开始对话。对话是当 id_sender 和 id_recipient 和 id_ad 在行中相同时。但例如:

第一行:id_sender = 1 id_recipient = 2 id_ad = 1

第二行 id_sender = 2 id_recipient = 1 id_ad = 1

这 2 行应该归为一个对话,所以我创建了查询:

SELECT id_ad
     , id_sender
     , u.name
     , id_recipient
     , uu.name
     , subject from ads.messages m
  JOIN ads.advertisements 
 USING (id_ad)
  JOIN ads.users u 
    ON m.id_sender = u.id_user
  JOIN ads.users uu 
    ON m.id_recipient = uu.id_user
 WHERE m.id_recipient = 133 
    OR m.id_sender = 133
 GROUP 
    BY id_ad
     , id_sender
     , subject
     , u.name
     , m.id_recipient
     , uu.name

返回:

这个查询是正确的,但我需要返回上图中的一个结果,查询应该返回 3 行

返回哪一个并不重要 - 要重新运行,我需要所有此列,结果行应该是 3 而不是 4

有什么想法吗?

【问题讨论】:

返回哪个并不重要 [原文如此]。这应该很重要! 为什么重要?同一事物的两个组合本质上是同一事物 返回两组结果之一的查询?这太糟糕了。 @sagi 因为电脑不擅长处理“我不在乎,挑一个你最喜欢的”。 【参考方案1】:

我必须编辑一些你的代码,但结果还是和上面一样:

【讨论】:

以上是关于带有连接和多个分组的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

sql99 连接查询

sql面试题_sql_分组查询左连接和右连接的区别

SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242

Laravel Eloquent 查询,带有连接、计数和分组依据

sql连接查询和分组查询

将带有连接的 SQL 查询转换为 lambda 表达式