LEFT JOIN选择条件

时间:2015-02-06 21:49:26

标签: php mysql select left-join

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

,我不想从消息中选择行

我的查询结果错误。我该如何解决?

2 个答案:

答案 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