Rumah >pangkalan data >tutorial mysql >Bagaimanakah Subqueries Berkorelasi Boleh Menggantikan CROSS APPLY dalam MySQL?
CROSS/OUTER APPLY dalam MySQL
Walaupun menjadi operator yang digunakan secara meluas dalam T-SQL, MySQL tidak menyokong sintaks CROSS APPLY secara asli . Ini boleh memberikan cabaran kepada pembangun yang perlu menggunakan keupayaan CROSS APPLY dalam persekitaran MySQL.
Memahami SUBQUERI TERKAIT
Dalam MySQL, pendekatan biasa untuk menghampiri kefungsian CROSS APPLY adalah untuk menggunakan subkueri berkorelasi. Subkueri berkorelasi ialah subkueri yang merujuk lajur daripada pertanyaan luar. Dengan membenamkan subkueri berkorelasi dalam pernyataan SELECT atau syarat sertai, anda boleh mencapai hasil yang serupa dengan CROSS APPLY.
Contoh 1: Menyertai Subquery Berkorelasi sebagai Predikat
Pertimbangkan pertanyaan berikut, yang cuba menggunakan CROSS APPLY untuk mendapatkan nilai tertentu daripada ORD_HISTORY jadual:
SELECT ORD.ID ,ORD.NAME ,ORD.DATE ,ORD_HIST.VALUE FROM ORD CROSS APPLY ( SELECT TOP 1 ORD_HISTORY.VALUE FROM ORD_HISTORY WHERE ORD.ID = ORD_HISTORY.ID AND ORD.DATE <= ORD_HISTORY.DATE ORDER BY ORD_HISTORY.DATE DESC ) ORD_HIST
Disebabkan kekurangan sokongan CROSS APPLY MySQL, pendekatan yang lebih sesuai ialah menggunakan gabungan dengan subkueri berkorelasi sebagai predikat:
SELECT ORD.ID ,ORD.NAME ,ORD.DATE ,ORD_HISTORY.VALUE FROM ORD INNER JOIN ORD_HISTORY ON ORD_HISTORY.ID = (SELECT ORD_HISTORY.ID FROM ORD_HISTORY WHERE ORD.ID = ORD_HISTORY.ID AND ORD.DATE <= ORD_HISTORY.DATE ORDER BY ORD_HISTORY.DATE DESC LIMIT 1 )
Dalam pertanyaan ini, subquery berkorelasi digunakan untuk mengambil nilai yang sesuai daripada ORD_HISTORY dan membenamkannya sebagai gabungan keadaan.
Contoh 2: Menggunakan Subkueri Berkorelasi Secara Terus dalam Pernyataan SELECT
Dalam kes di mana hanya satu medan daripada jadual sasaran diperlukan, subkueri berkorelasi boleh digabungkan terus ke dalam pernyataan SELECT:
SELECT ORD.ID ,ORD.NAME ,ORD.DATE ,(SELECT ORD_HISTORY.VALUE FROM ORD_HISTORY WHERE ORD.ID = ORD_HISTORY.ID AND ORD.DATE <= ORD_HISTORY.DATE ORDER BY ORD_HISTORY.DATE DESC LIMIT 1 ) AS VALUE FROM ORD
Dengan memanfaatkan subkueri berkorelasi, pembangun boleh dengan berkesan anggaran kefungsian CROSS APPLY dalam MySQL, membolehkan mereka melakukan operasi pengambilan data yang kompleks walaupun tanpa sokongan CROSS APPLY asli.
Atas ialah kandungan terperinci Bagaimanakah Subqueries Berkorelasi Boleh Menggantikan CROSS APPLY dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!