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

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

Barbara Streisand
Barbara Streisandoriginal
2024-12-09 11:01:06905parcourir

How to Replicate CROSS APPLY Functionality in MySQL?

CROSS/OUTER APPLY dans MySQL

MySQL ne prend pas en charge nativement la syntaxe CROSS APPLY, ce qui peut être un défi lorsque vous tentez d'effectuer certaines opérations . Cette question consiste à trouver un équivalent MySQL à la requête CROSS APPLY suivante :

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

Bien que MySQL ne prenne pas en charge directement CROSS APPLY, il existe d'autres moyens d'obtenir ses fonctionnalités. L'approximation la plus proche consiste à utiliser une sous-requête corrélée comme prédicat dans une requête de jointure, comme indiqué ci-dessous :

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
        )

Si, comme dans ce cas, un seul champ de la table cible est nécessaire, la jointure with sous-requête peut être omis et la sous-requête peut être placée directement 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

En utilisant ces approches, les utilisateurs de MySQL peuvent obtenir des fonctionnalités similaires à CROSS POSTULER sans compromettre l'exactitude ou l'efficacité de leurs requêtes.

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!

Déclaration:
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