我自己加入了一個表,並且我在下圖中突出顯示了重複的對,如何刪除它們?
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 |
---|---|
愛麗絲劉易斯 | 伊麗莎白·布萊克 |
克里斯·托馬斯 | 約翰史密斯 |
克里斯·托馬斯 | 麥克懷特 |
伊麗莎白·布萊克 | 愛麗絲劉易斯 |
伊麗莎白·布萊克 | 傑克格林 |
傑克格林 | 伊麗莎白·布萊克 |
喬馬丁內斯 | 麥克安德森 |
約翰史密斯 | 克里斯·托馬斯 |
麥克安德森 | 喬馬丁內斯 |
麥克懷特 | 克里斯·托馬斯 |
上表曾經是一張圖片
你可以這樣做
請參閱此範例
#我已經建立了 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”。
這是您將從重構的查詢中獲得的輸出: