Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Meniru Fungsi CROSS APPLY dalam MySQL?

Bagaimana untuk Meniru Fungsi CROSS APPLY dalam MySQL?

Barbara Streisand
Lepaskan: 2024-12-09 11:01:06
asal
848 orang telah melayarinya

How to Replicate CROSS APPLY Functionality in MySQL?

CROSS/Outer APPLY dalam MySQL

MySQL tidak menyokong sintaks CROSS APPLY secara asli, yang boleh menjadi cabaran apabila cuba melakukan operasi tertentu . Soalan ini berpusat di sekitar mencari MySQL yang setara dengan pertanyaan CROSS APPLY berikut:

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
Salin selepas log masuk

Walaupun MySQL tidak mempunyai sokongan CROSS APPLY langsung, terdapat cara alternatif untuk mencapai fungsinya. Anggaran terdekat ialah menggunakan subkueri berkorelasi sebagai predikat dalam pertanyaan gabungan, seperti yang dilihat di bawah:

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
        )
Salin selepas log masuk

Jika, seperti dalam kes ini, hanya satu medan daripada jadual sasaran diperlukan, gabungan dengan subquery boleh diabaikan dan subquery boleh diletakkan terus 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
Salin selepas log masuk

Dengan menggunakan pendekatan ini, pengguna MySQL boleh mencapai kefungsian yang serupa dengan CROSS APPLY tanpa menjejaskan ketepatan atau kecekapan pertanyaan mereka.

Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi CROSS APPLY dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan