我有一个名为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语句,它不返回左表中没有值的值,而右表中没有值。
我该如何解决?
当您在WHERE
Clause中编写语句时,它将过滤整个查询结果。
并且当您在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] 删除。
我来说两句