【发布时间】: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 因为电脑不擅长处理“我不在乎,挑一个你最喜欢的”。
标签: mysql sql postgresql join group-by