SELECT * FROM messages as t1
LEFT JOIN
(
SELECT topic_id date_seen FROM seen_log_ex WHERE member_id = :uid
) as t2
ON t1.topic_id=t2.topic_id AND t2.date_seen < t1.post_date
如果表t2没有包含其topic_id,我想从消息中选择行。
如果表t2包含topic_id并且t2.date_seen < t2.post_date
如果表t2包含topic_id并且t2.date_seen >= t2.post_date
我的查询结果错误。我该如何解决?
答案 0 :(得分:1)
怎么样;
select * from messages m left join seen_log_ex l
on m.topic_id = l.topic_id
where
(l.topic_id is null OR l.date_seen < l.post_date)
and l.member_id = :uid
答案 1 :(得分:1)
您似乎仍然需要在子查询中使用member_id = :uid
,但逻辑的其余部分应位于WHERE
中,而不是ON
的{{1}}。
它还假设LEFT JOIN
每个seen_log_ex
有一行或一行。如果topic_id
结果可能有多行,则结果不正确。
topic_id