繁体   English   中英

sql嵌套内部联接仅返回1个结果

[英]sql nested inner join only returning 1 result

我正在构建一个类似于facebookchat的Chatapplication。 我有用户,对话和消息。 所有3个都有自己的表。 现在,我尝试获取所有包含特定用户和会话最新消息的转换器。

我尝试了此查询,但实际上我只返回了1行,但有更多行匹配

SELECT conversations.id as converid,
       messages.from as messageauthor,
       messages.message as message 
FROM conversations INNER JOIN (SELECT * FROM messages 
                               ORDER BY date DESC LIMIT 1) as messages 
ON messages.conversationid=conversations.id 
WHERE user1=3 
OR user2=3

当我做

SELECT conversations.id as converid,
           messages.from as messageauthor 
FROM conversations INNER JOIN  messages 
ON messages.conversationid=conversations.id 
WHERE user1=3 
OR user2=3

我肯定会得到所有结果,并且当我检查converid时,我会得到3个唯一的ID,因此至少有3个cond正在进行userid3。因此,最上面的查询也应该返回3。现在我不明白为什么仅返回1行。 嵌套查询中的limit 1是否会影响整个查询?

期待一些指示...

否。 limit 1影响子查询,因此它仅返回一行。 因此,只有一场比赛。

此查询有什么问题(第二个查询,但格式不同):

SELECT c.id as converid, m.from as messageauthor 
FROM conversations c INNER JOIN 
     messages m
     ON m.conversationid=c.id 
WHERE user1=3 OR user2=3;

我知道了,您需要最新消息。 尝试计算并重新加入:

SELECT c.id as converid, m.from as messageauthor 
FROM conversations c INNER JOIN 
     messages m
     ON m.conversationid=c.id join
     (select m.conversationid, max(date) as maxdate
      from messages m
      group by m.conversationid
     ) mmax
     on mmax.conversationid = m.conversationid and m.date = mmax.maxdate
WHERE user1=3 OR user2=3;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM