**已关闭。**此问题需要debugging details。当前不接受答案。
编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
3天前关闭。
Improve this question
我有一个名为chat_messages的mariadb表。它包含用户发送的消息列表。该表包含2列,其中包含发件人id和收件人id。我想生成一个与某个人通信的唯一用户列表。我尝试了很多查询和连接,但没有一个有效。
如果我使用SELECT sender_id, receiver_id FROM chat_message WHERE sender_id=1 OR receiver_id=1 GROUP BY sender_id, receiver_id
,那么我会得到一个双重列表(用户在列表中出现不止一次,即作为接收者和发送者)。我需要一个唯一的用户组合列表。
我可以使用什么sql查询来获取某个人一直在与之通信的唯一用户列表?
2条答案
按热度按时间qacovj5a1#
将
UNION DISTINCT
与列别名一起使用b1uwtaje2#
如果用户=1(发送者)发送消息给用户=19(接收者),用户=19(发送者)回复用户=1(接收者),您将有两个记录,不能使用
GROUP BY
过滤,因为两个用户都是发送者和接收者。由于您只想知道哪些用户在一起交谈,而不想知道谁是消息的发送者或接收者,因此只需将数字较小的用户ID移到左侧,将数字较大的用户ID移到右侧:
当然,您也可以使用UNION,其中第一个选择将发送方放在左侧,第二个选择将接收方放在左侧:
根据EXPLAIN,后一个会更慢。