带有连接和多个分组的 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 查询的主要内容,如果未能解决你的问题,请参考以下文章
SQL 从带有子查询的多个表中选择数据(包括来自内部连接的数据)错误:1242