我加入了一个表与它的自我,我有重复的对,因为我突出显示在下面的图像如何删除它们?
select DISTINCT A.name as name1 , B.name as name2
from (select name , ratings.* from reviewers inner join ratings on reviewers.id =
ratings.reviewer_id ) A ,
(select name , ratings.* from reviewers inner join ratings on reviewers.id =
ratings.reviewer_id ) B
where A.reviewer_id <> B.reviewer_id
and A.book_id = B.book_id
order by name1 , name2 ASC
名称1 | 名称2 |
---|---|
爱丽丝·刘易斯 | 伊丽莎白·布莱克 |
克里斯·托马斯 | 约翰·史密斯 |
克里斯·托马斯 | 迈克·白色 |
伊丽莎白·布莱克 | 爱丽丝·刘易斯 |
伊丽莎白·布莱克 | 杰克·绿色 |
杰克·绿色 | 伊丽莎白·布莱克 |
乔·马丁内斯 | 迈克·安德森 |
约翰·史密斯 | 克里斯·托马斯 |
迈克·安德森 | 乔·马丁内斯 |
迈克·白色 | 克里斯·托马斯 |
上面的表曾经是image
4条答案
按热度按时间hzbexzde1#
你可以做
参见this example
nkoocmlb2#
要删除重复项,您首先需要找到它们:
然后您可以删除它们:
参见:DBFIDDLE
yshpjwxd3#
这可以使用
greatest
和least
来识别跨列的重复项:此查询将获得重复项:
结果:
然后:
Demo here
cdmah0mi4#
我创建了DDL和DML语句来重现数据库,并编写了一个检索不重复对的查询。以下是“构建”代码,可能对其他人有所帮助:
下面是重构后的查询:
使用别名A和B两次使用相同的子查询,组合
reviewers
和ratings
表并检索每对书评人-图书评分的数据。然后,主外部查询从子查询结果中选择不同的审阅者姓名对。我们在3个条件下在子查询A和B之间使用
JOIN
:A.book_id = B.book_id
所以这两对评论家对同一本书进行了评级。A.id <> B.id
过滤掉具有相同ID的审阅者对,防止自匹配。A.name < B.name
,以确保这些对的顺序与下面的输出一致,从而消除重复。这样,对于给定的配对,仅考虑一个名称组合,例如“Elizabeth Black-Jack绿色”而不是“Jack Green-Elizabeth Black”。这是您将从重构后的查询中获得的输出: