Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mensimulasikan Keadaan 'DAN' Dengan Cekap Merentas Berbilang Baris dalam SQL?

Bagaimana untuk Mensimulasikan Keadaan 'DAN' Dengan Cekap Merentas Berbilang Baris dalam SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-05 17:43:44567semak imbas

How to Efficiently Simulate an

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:

  1. Menapis jadual "tag" untuk baris yang "tagid" sepadan dengan tagids yang diingini.
  2. Menghimpunkan hasil mengikut "contentID" untuk mengenal pasti kandungan yang ditag dengan tagids tersebut.
  3. Menggunakan klausa "HAVING" untuk memastikan bahawa hanya kandungan yang ditag dengan semua tagids yang ditentukan (iaitu, COUNT daripada "tagid" unik = 3) disertakan.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn