MySQL左连接最大ID

数码宝贝

我有一个名为tbl_messages的表contains消息。如果是第一条消息,则每个消息在MessageReply下的值为0;如果是对另一条消息的答复,则每个消息的ID为消息ID。

我需要获取每个根消息的数据及其最新响应的日期。

我正在运行以下SQL过程:

SELECT 
    m1.*, m2.MessageID, m2.MessageDate 
FROM 
    tbl_messages as m1 LEFT JOIN tbl_messages as m2 
ON 
    m1.MessageID = m2.MessageReply 
WHERE 
    m1.MessageReply = '0' AND 
    (m1.MessageUser = '1' OR m1.MessageBusiness = '1') AND 
    m2.MessageID = (SELECT MAX(MessageID) FROM tbl_messages WHERE MessageReply = m1.MessageID) 
ORDER BY 
    m2.MessageID desc, m1.MessageID desc

我的问题是由于最后一个WHERE语句,它不返回左表中没有值的值,而右表中没有值。

我该如何解决?

特多(Tedo G.)

当您在WHEREClause中编写语句时,它将过滤整个查询结果。

并且当您在ON左连接时Clause中编写该语句时,它将仅过滤左连接表,NULL如果语句不匹配,结果将是辅助表中的值。

SELECT 
    m1.*, m2.MessageID, m2.MessageDate 
FROM 
    tbl_messages as m1 LEFT JOIN tbl_messages as m2 
ON 
    m1.MessageID = m2.MessageReply 
    AND
    m2.MessageID = (SELECT MAX(MessageID) FROM tbl_messages WHERE MessageReply = m1.MessageID)

WHERE 
    m1.MessageReply = '0' AND 
    (m1.MessageUser = '1' OR m1.MessageBusiness = '1') 
ORDER BY 
    m2.MessageID desc, m1.MessageID desc

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章