Ini memerlukan perhatian di mana menempatkan kondisi (ke where
atau ke on
?) agar tidak tertipu :-) Anda perlu menambahkan kondisi t1 ke where
klausa dan untuk t2 ke on
klausa:
SELECT t1.type, t1.name, t1.value
FROM mytable t1
LEFT JOIN mytable t2 ON t1.type = t2.type AND t1.value > t2.value
AND t2.popularity > 3 /* here */
WHERE t2.value IS NULL
AND t1.popularity > 3 /* and here */
Belum mengujinya, tetapi seharusnya berfungsi.
Mencoba penjelasan: kondisi di mana klausa memengaruhi elemen mana yang Anda anggap sebagai elemen potensial dengan nilai terendah. Sedangkan kondisi di on
klausa memengaruhi tautan:dengan elemen lain apa yang ingin Anda bandingkan? Ini mendefinisikan grup di mana Anda membandingkan. Secara teknis berdampak pada saat t2.* akan menjadi NULL. Apakah Anda memberikan kondisi pada t2.popularity ke where
sebagai gantinya, Anda tidak akan menerima NULL (yaitu tidak menemukan elemen dengan nilai terendah) untuk grup di mana elemen terendah memiliki popularitas rendah.