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不包含主题id,我想从消息中选择行。
如果表t2包含主题id且
t2.date_seen < t2.post_date
如果表t2包含主题id且
t2.date_seen >= t2.post_date
我的查询结果不对。我怎样才能修好它?
最佳答案
似乎在子查询中仍然需要member_id = :uid
,但其余逻辑应该在WHERE
中,而不是在ON
的LEFT JOIN
中。
它还假设seen_log_ex
对于每个topic_id
有零行或一行。如果它可以有多行用于topic_id
结果将是不正确的。
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
WHERE
t2.date_seen < t1.post_date
OR t2.topic_id IS NULL
关于php - 左联接选择条件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28375387/