繁体   English   中英

行重复

[英]Duplicated rows

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

输出:

产量

主题:

主题

帖子:

帖子

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

如果联接产生多个结果,并且您最多只需要一个结果,则必须重写联接和/或筛选条件才能提供该结果。 如果您只想要所有结果中的最新结果,那么一次使用它是可行且相当容易的。

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 );

相关子查询提取出一个日期 ,该日期是所有可连接候选中的最高(最新)值。 然后,该行成为参与连接的行-如果没有候选人,则当然不行。 这是我经常使用的模式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM