在where子句中使用select

4
我有一个名为message的表。我想只选择person_send_id和person_receive_id不同的消息。
我能正确选择person_send_id和person_receive_id。
然而,我不知道如何选择消息。
我想使用Select within a Select,但我不知道如何实现它或者这是否是正确的做法。
SELECT DISTINCT person_send_id, person_receive_id 
FROM `message` 
WHERE person_send_id = 21 OR person_receive_id = 21 
//AND SELECT message FROM `message` when these criteria are met

消息表

message_id 
message 
person_send_id 
person_receive_id

以下是我的表数据。

enter image description here

我想只选择person_send_id和person_receive_id重复的第一条消息。
因此,如果我向同一个人发送了10条消息,我只想获取包含消息的记录,例如这里只有"Hello"。


1
如果发送者向接收者发送了多条消息,会发生什么情况? - wallyk
没问题。我只想每个“对话”显示一条消息。在这种情况下,它充当标题。 - Viteazul
你能给出表格的快照以及你期望的输出吗? - lu5er
2
如果你只想获取 message,你可以将它添加到你当前的选择中。例如:SELECT DISTINCT person_send_id, person_receive_id, message。这是我从你的问题中理解的,或者我有什么地方理解错误吗? - Robin Carlo Catacutan
如果我添加消息,我的查询将返回两行。我只想返回第一条消息的1行。 - Viteazul
1
你试过@RobinCarloCatacutan建议的吗?这应该会解决问题。 - lu5er
1个回答

5
您可以将 message 直接添加到当前选择器中。
SELECT DISTINCT person_send_id, person_receive_id, message 
FROM `message` 
WHERE person_send_id = 21 OR person_receive_id = 21;

我猜你需要最新的版本作为标题。

添加 ORDER BY message_id DESC LIMIT 1

例如:

 SELECT DISTINCT person_send_id, person_receive_id, message 
 FROM `message` 
 WHERE person_send_id = 21 OR person_receive_id = 21 
 ORDER BY message_id DESC LIMIT 1;

真是个传奇。非常感谢,我不知道为什么我没有想到LIMIT。 - Viteazul
1
@Viteazul 很酷!很高兴能够帮助到你! - Robin Carlo Catacutan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接