[英]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.