Maison > base de données > tutoriel mysql > Comment répliquer la fonctionnalité CROSS/OUTER APPLY dans MySQL ?

Comment répliquer la fonctionnalité CROSS/OUTER APPLY dans MySQL ?

DDD
Libérer: 2024-12-07 13:07:16
original
514 Les gens l'ont consulté

How to Replicate CROSS/OUTER APPLY Functionality in MySQL?

CROSS/OUTER APPLY dans MySQL

MySQL ne prend pas en charge directement la syntaxe CROSS APPLY, mais des approches alternatives peuvent être utilisées pour obtenir des fonctionnalités similaires .

Imbriqué Sous-requête :

Dans MySQL, une alternative courante consiste à utiliser une sous-requête corrélée comme prédicat dans une instruction JOIN. Cela garantit que les résultats de la sous-requête sont évalués pour chaque ligne de la requête externe.

Exemple :

Étant donné la requête :

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
Copier après la connexion

La requête équivalente utilisant une sous-requête imbriquée serait :

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
        )
Copier après la connexion

Direct Sous-requête :

Dans les cas où un seul champ de la table cible est requis, une sous-requête corrélée peut être directement intégrée dans l'instruction 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
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal