Ich habe mich selbst einer Tabelle angeschlossen und die doppelten Paare sind im Bild unten hervorgehoben. Wie kann ich sie löschen?
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
Name 1 | Name 2 |
---|---|
Alice Lewis | Elizabeth Blake |
Chris Thomas | John Smith |
Chris Thomas | Mike White |
Elizabeth Blake | Alice Lewis |
Elizabeth Blake | Jack Green |
Jack Green | Elizabeth Blake |
Joe Martinez | Mike Anderson |
John Smith | Chris Thomas |
Mike Anderson | Joe Martinez |
Mike White | Chris Thomas |
Die obige Tabelle war einmal ein Bild
你可以这样做
请参阅此示例
我已经创建了 DDL 和 DML 语句来重现数据库并编写检索不重复对的查询。这是可能对其他人有帮助的“构建”代码:
这是重构的查询:
同一个子查询使用别名 A 和 B 两次,组合
reviewers
和ratings
表并检索每对评论者-书籍评级的数据。 p>然后,主外部查询从子查询结果中选择不同的审阅者姓名对。我们在 3 个条件下在子查询 A 和 B 之间使用
JOIN
:A.book_id = B.book_id
因此这对评论者对同一本书进行了评分。A.id B.id
用于过滤掉具有相同 ID 的评论者对,防止自我匹配。A.name 确保这些对的排序与下面的输出一致,从而消除重复。这样,对于给定的一对,仅考虑一种名称组合,例如“Elizabeth Black-Jack Green”,但不考虑“Jack Green-Elizabeth Black”。
这是您将从重构的查询中获得的输出: