Saya sendiri telah menyertai jadual dan saya mempunyai pasangan pendua yang diserlahkan dalam imej di bawah, bagaimana saya boleh memadamkannya?
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
Nama 1 | Nama 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 |
Jadual di atas pernah menjadi gambar
Anda boleh melakukan ini
Lihat contoh ini
Saya telah mencipta pernyataan DDL dan DML untuk menghasilkan semula pangkalan data dan pertanyaan bertulis untuk mendapatkan pasangan unik. Berikut ialah kod "bina" yang mungkin membantu orang lain:
Ini adalah pertanyaan yang difaktorkan semula:
Subkueri yang sama menggunakan alias A dan B dua kali, menggabungkan
reviewers
和ratings
jadual dan mendapatkan semula data untuk setiap pasangan penilaian buku pengulas. p>Pertanyaan luar utama kemudian memilih pasangan nama pengulas yang berbeza daripada hasil subkueri. Kami menggunakan
JOIN
antara subkueri A dan B di bawah 3 syarat:A.book_id = B.book_id
Jadi pasangan pengulas ini menilai buku yang sama.A.id B.id
Digunakan untuk menapis pasangan pengulas dengan ID yang sama untuk mengelakkan pemadanan diri.A.name Pastikan pasangan dipesan konsisten dengan output di bawah, sekali gus menghapuskan pendua. Dengan cara ini, untuk pasangan tertentu, hanya satu kombinasi nama yang dipertimbangkan, seperti "Elizabeth Black-Jack Green", tetapi bukan "Jack Green-Elizabeth Black".
Ini adalah output yang anda akan dapat daripada pertanyaan yang distruktur semula: