[英]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.