Menyelesaikan Persilangan "DAN" Melintasi Berbilang Baris dalam SQL
Menyiasat pangkalan data untuk mendapatkan semula data berdasarkan berbilang keadaan adalah tugas biasa. Walau bagaimanapun, apabila syarat perlu digunakan pada berbilang baris, pendekatan boleh menjadi rumit. Artikel ini membentangkan penyelesaian yang lebih cekap untuk senario sedemikian, menghapuskan keperluan untuk sub-pertanyaan.
Pertimbangkan jadual "tag" dengan lajur "tagid" dan "contentid." Untuk mencari "contentid" setiap bahagian kandungan yang ditag dengan tagids 334, 338 dan 342, pendekatan tradisional melibatkan sub-pertanyaan bersarang. Walau bagaimanapun, kaedah ini menjadi kurang cekap apabila bilangan keadaan bertambah.
Pendekatan yang dioptimumkan mengelakkan sub-pertanyaan, menghasilkan prestasi pertanyaan yang lebih pantas dan lebih meluas. Berikut ialah pertanyaan yang disemak:
SELECT contentID FROM tags WHERE tagID in (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
Pertanyaan ini mencapai persimpangan dengan menggunakan operator "IN" dengan senarai tagids. Klausa "GROUP BY" mengumpulkan hasil mengikut "contentID," dan klausa "HAVING" menapis hasil untuk memasukkan hanya kandungan yang mempunyai semua tagid yang ditentukan.
Secara umum, corak ini boleh dilanjutkan untuk mencari persilangan mana-mana bilangan teg:
SELECT contentID FROM tags WHERE tagID in (...) --taglist GROUP BY contentID HAVING COUNT(DISTINCT tagID) = ... --tagcount
Dengan menggantikan ruang letak "senarai tag" dan "kira teg" dengan yang dikehendaki nilai, pertanyaan ini boleh mencari kandungan yang memenuhi kriteria persimpangan dengan cekap.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Persimpangan Keadaan Berbilang Baris dengan Cekap dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!