J'ai moi-même rejoint une table et j'ai les paires en double mises en évidence dans l'image ci-dessous, comment puis-je les supprimer ?
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
Nom 1 | Nom 2 |
---|---|
Alice Lewis | Elizabeth Blake |
Chris Thomas | John Smith |
Chris Thomas | Mike Blanc |
Elizabeth Blake | Alice Lewis |
Elizabeth Blake | Jack Vert |
Jack Vert | Elizabeth Blake |
Joe Martinez | Mike Anderson |
John Smith | Chris Thomas |
Mike Anderson | Joe Martinez |
Mike Blanc | Chris Thomas |
Le tableau ci-dessus était autrefois une image
Vous pouvez le faire
Voir cet exemple
J'ai créé des instructions DDL et DML pour reproduire la base de données et des requêtes écrites pour récupérer des paires uniques. Voici le code "build" qui pourrait aider les autres :
Voici la requête refactorisée :
La même sous-requête utilise les alias A et B deux fois, combinant les tables
reviewers
和ratings
et récupérant les données pour chaque paire de notes critique-livre. p>La requête externe principale sélectionne ensuite des paires de noms de réviseurs distinctes à partir des résultats de la sous-requête. On utilise
JOIN
entre les sous-requêtes A et B sous 3 conditions :A.book_id = B.book_id
Cette paire de critiques a donc noté le même livre.A.id B.id
Utilisé pour filtrer les paires de réviseurs avec le même identifiant afin d'éviter l'auto-appariement.A.name Assurez-vous que les paires sont ordonnées conformément au résultat ci-dessous, éliminant ainsi les doublons. De cette façon, pour une paire donnée, une seule combinaison de noms est prise en compte, par exemple « Elizabeth Black-Jack Green », mais pas « Jack Green-Elizabeth Black ».
Voici le résultat que vous obtiendrez de la requête restructurée :