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
Libérer: 2024-12-09 11:01:06
original
848 Les gens l'ont consulté

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

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal