重复的行

时间:2015-02-02 19:22:08

标签: mysql sql left-join

SQL查询:

SELECT 
    T.*,
    U.nick AS author_nick,
    P.id AS post_id,
    P.name AS post_name,
    P.author AS post_author_id,
    P.date AS post_date,
    U2.nick AS post_author
FROM 
    zero_topics T
LEFT JOIN 
    zero_posts P
ON 
    T.id = P.topic_id
LEFT JOIN 
    zero_players U
ON 
    T.author = U.uuid
LEFT JOIN 
    zero_players U2
ON 
    P.author = U2.uuid
ORDER BY 
CASE 
    WHEN P.date is null THEN T.date
    ELSE P.date 
END DESC

输出:

output

主题:

topics

文章:

posts

问题:为什么我有重复的主题ID 22?我在mysql中有两个主题(id 22和23)和两个帖子(id 24和25)。我想在最后一篇文章中看到主题。

1 个答案:

答案 0 :(得分:0)

如果连接产生多个结果,并且您只想获得最多一个结果,则必须重写连接和/或过滤条件以提供该结果。如果你只想要所有结果的最新结果,那么一旦你使用它几次就可以,并且相当容易。

select  a.Data, b.Data
from    Table1 a
left join Table2 b
    on  b.JoinValue = a.JoinValue
    and b.DateField =(
        select Max( DateField )
        from   Table2
        where  JoinValue = b.JoinValue );

相关子查询提取一个日期,这是所有可加入候选项的最高(最近)值。然后成为参与联接的行 - 或者,如果根本没有候选人,当然也没有。这是我用了很多的模式。