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

Bagaimana untuk Meniru Fungsi CROSS/OUTER APPLY dalam MySQL?

DDD
Lepaskan: 2024-12-07 13:07:16
asal
476 orang telah melayarinya

How to Replicate CROSS/OUTER APPLY Functionality in MySQL?

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

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

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

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan