繁体   English   中英

如何摆脱LEFT JOIN SQL Query中的重复值

[英]How to get rid of duplicated values in LEFT JOIN SQL Query

我有一个带有父级和子级注释的注释表,其中包含以下字段

comments
    comment_id
    parent_id
    thread_id (Foreign Key)
    title
    body
    comment_date
    user_name

我想整理这个表单中的注释,首先显示父注释,然后是子注释,然后是下一个父注释,然后是子注释

我使用以下查询

SELECT c1 . * , c2 . * 
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL 
AND c1.thread_id =122

它给出了以下输出 在此输入图像描述

您可以看到第一个表中有这么多重复的行

我想要以下输出

在此输入图像描述

您可以看到,在此输出中,首先是父注释(在parent_id中为NULL),然后是其子注释,然后是下一个父注释,然后是其子注释。

如何形成我的SQL查询以获得此输出。 注意:(第二张图片不是任何查询的结果,我修改了它只是为了清楚我的观点,并告诉你我想要什么样的输出。)

没有行是重复的,只是c1注释被重复选中,因为它表面上是许多c2注释的父级。 听起来你真的想要两个单独的查询。

SELECT * FROM comments WHERE parent_id IS NULL AND thread_id = 122
UNION
SELECT c2.* FROM comments c1 JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL AND c1.thread_id =122
SELECT c1 . *
FROM comments c1
RIGHT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c1.parent_id IS NULL 
AND c1.thread_id =122
SELECT c1 . * , c2 . * 
FROM comments c1
LEFT JOIN comments c2 ON c2.parent_id = c1.comment_id
WHERE c2.parent_id IS NOT NULL 
AND c1.thread_id = 122

我创建了表并使用上面的查询进行了测试,它对我来说很好。如果上面的方法对你不好,那么请导出评论表并在这里发帖。我会发送确切的查询。

再一次,如果它在cakephp中,那么在find查询中使用'threaded',它总是适用于数据库中的父子类型表结构。

等待回复......

暂无
暂无

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

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