DISTINCT tidak akan membantu Anda jika baris memiliki kolom yang berbeda. Jelas, salah satu tabel tempat Anda bergabung memiliki beberapa baris untuk satu baris di tabel lain. Untuk mendapatkan kembali satu baris, Anda harus menghilangkan beberapa baris lainnya di tabel tempat Anda bergabung.
Cara termudah untuk melakukannya adalah dengan meningkatkan klausa where atau pembatasan GABUNG untuk hanya bergabung ke satu rekaman yang Anda inginkan. Biasanya ini memerlukan penentuan aturan yang akan selalu memilih entri 'benar' dari tabel lain.
Mari kita asumsikan Anda memiliki masalah sederhana seperti ini:
Person: Jane
Pets: Cat, Dog
Jika Anda membuat gabungan sederhana di sini, Anda akan menerima dua catatan untuk Jane:
Jane|Cat
Jane|Dog
Ini sepenuhnya benar jika sudut pandang Anda adalah membuat daftar semua kombinasi orang dan hewan peliharaan. Namun, jika tampilan Anda seharusnya mencantumkan orang dengan hewan peliharaan, atau membuat daftar orang dan menampilkan salah satu hewan peliharaan mereka, Anda mengalami masalah sekarang. Untuk ini, Anda memerlukan aturan.
SELECT Person.Name, Pets.Name
FROM Person
LEFT JOIN Pets pets1 ON pets1.PersonID = Person.ID
WHERE 0 = (SELECT COUNT(pets2.ID)
FROM Pets pets2
WHERE pets2.PersonID = pets1.PersonID
AND pets2.ID < pets1.ID);
Yang dilakukan adalah menerapkan aturan untuk membatasi catatan Pet yang di gabungkan ke Pet dengan ID terendah (pertama di tabel Pets). Klausa WHERE pada dasarnya mengatakan "di mana tidak ada hewan peliharaan milik orang yang sama dengan nilai ID yang lebih rendah).
Ini akan menghasilkan satu hasil rekaman:
Jane|Cat
Aturan yang harus Anda terapkan pada tampilan Anda akan bergantung pada data di kolom yang Anda miliki, dan catatan 'beberapa' mana yang harus ditampilkan di kolom. Namun, itu akan menyembunyikan beberapa data, yang mungkin bukan yang Anda inginkan. Misalnya, aturan di atas menyembunyikan fakta bahwa Jane memiliki Anjing. Itu membuatnya tampak seolah-olah Jane hanya memiliki Kucing, padahal ini tidak benar.
Anda mungkin perlu memikirkan kembali konten tampilan Anda, dan apa yang ingin Anda capai dengan tampilan Anda, jika Anda mulai memfilter data yang valid.