CROSS/OUTER APPLY dalam MySQL
MySQL tidak mempunyai sokongan langsung untuk sintaks CROSS APPLY, tetapi pendekatan alternatif boleh digunakan untuk mencapai fungsi yang sama .
Bersarang Sub-pertanyaan:
Dalam MySQL, alternatif biasa ialah menggunakan sub-pertanyaan berkorelasi sebagai predikat dalam pernyataan JOIN. Ini memastikan bahawa hasil sub-pertanyaan dinilai untuk setiap baris dalam pertanyaan luar.
Contoh:
Diberikan pertanyaan:
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
Pertanyaan setara menggunakan sub-pertanyaan bersarang akan be:
SELECT ORD.ID ,ORD.NAME ,ORD.DATE ,ORD_HISTORY.VALUE FROM ORD INNER JOIN ORD_HISTORY ON ORD_HISTORY.<PRIMARY_KEY> = (SELECT ORD_HISTORY.<PRIMARY_KEY> FROM ORD_HISTORY WHERE ORD.ID = ORD_HISTORY.ID AND ORD.DATE <= ORD_HISTORY.DATE ORDER BY ORD_HISTORY.DATE DESC LIMIT 1 )
Sub-pertanyaan Langsung:
Dalam kes di mana hanya satu medan daripada jadual sasaran diperlukan, sub-pertanyaan berkorelasi boleh terus disepadukan 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
Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi CROSS/OUTER APPLY dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!