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中,而不是在ONLEFT 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/

10-13 09:50