Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mensimulasikan Keadaan 'DAN' Dengan Cekap Merentas Berbilang Baris dalam SQL?
Mensimulasikan "DAN" Melalui Berbilang Baris dalam SQL
Dalam bidang pangkalan data hubungan, pengambilan data dengan cekap berdasarkan pelbagai kriteria adalah penting , terutamanya apabila berurusan dengan set data yang besar. Pertimbangkan senario berikut: jadual "tag" dengan dua lajur, "tagid" dan "contentid," mewakili teg yang diberikan kepada pelbagai bahagian kandungan. Objektifnya adalah untuk mendapatkan semula "contentid" kandungan yang ditandakan dengan set tagid tertentu (cth., 334, 338, dan 342).
Pendekatan naif akan melibatkan subkueri bersarang, menterjemah dengan berkesan kepada:
SELECT contentid FROM tags WHERE tagid = 334 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 338 AND contentid IN ( SELECT contentid FROM tags WHERE tagid = 342 ) )
Walaupun pendekatan ini berkesan, ia menjadi menyusahkan dan tidak cekap untuk sebilangan besar tagids. Nasib baik, wujud penyelesaian yang lebih cekap dan boleh diperluaskan.
Menggunakan kuasa operasi berasaskan set, satu pertanyaan boleh dirumuskan yang menghapuskan keperluan untuk subkueri:
SELECT contentID FROM tags WHERE tagID IN (334, 338, 342) GROUP BY contentID HAVING COUNT(DISTINCT tagID) = 3
Pertanyaan ini beroperasi dengan:
Penyelesaian ini kekal cekap walaupun untuk bilangan yang besar tagids, kerana ia tidak melibatkan subkueri bersarang atau operasi rekursif. Kerumitan masa kekal linear berkenaan dengan bilangan tagid yang berkaitan, menjadikannya sesuai untuk set data yang besar dan pertanyaan ad hoc.
Atas ialah kandungan terperinci Bagaimana untuk Mensimulasikan Keadaan 'DAN' Dengan Cekap Merentas Berbilang Baris dalam SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!