Pilih nilai merentas baris yang memenuhi syarat unik
Soalan ini menerangkan senario di mana kita mempunyai jadual dengan dua lajur: userid dan roleid. Matlamatnya adalah untuk mendapatkan id pengguna unik yang mempunyai ketiga-tiga roleid yang ditentukan.
Salah satu cara ialah menggabungkan pengagregatan dan penapisan:
<code class="language-sql">SELECT userid FROM userrole WHERE roleid IN (1, 2, 3) GROUP BY userid HAVING COUNT(1) = 3</code>
Pertanyaan ini mengumpulkan hasil mengikut userid, mengira kejadian setiap roleid untuk setiap userid. Klausa HAVING memastikan bahawa hanya userid dengan tiga roleid berbeza dipilih.
Walau bagaimanapun, pendekatan lain menggunakan cantuman mungkin lebih cekap, terutamanya apabila bekerja dengan set data yang besar:
<code class="language-sql">SELECT t1.userid FROM userrole t1 JOIN userrole t2 ON t1.userid = t2.userid AND t2.roleid = 2 JOIN userrole t3 ON t2.userid = t3.userid AND t3.roleid = 3 AND t1.roleid = 1</code>
Pertanyaan ini menggunakan cantuman bersarang untuk memilih id pengguna berdasarkan roleid yang ditentukan. Syarat gabungan luar menyemak kehadiran setiap roleid untuk setiap userid, dan syarat akhir AND memastikan bahawa userid yang dipilih mempunyai ketiga-tiga roleid yang ditentukan.
Bergantung pada pengedaran data dan ciri prestasi sistem pangkalan data asas, mana-mana pendekatan mungkin lebih sesuai. Adalah disyorkan untuk menguji kedua-dua kaedah untuk menentukan penyelesaian terbaik untuk senario khusus anda.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Pengguna dengan Cekap dengan Ketiga-tiga ID Peranan Yang Ditentukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!