Maison >base de données >tutoriel mysql >Comment puis-je obtenir les fonctionnalités de CROSS APPLY dans MySQL ?

Comment puis-je obtenir les fonctionnalités de CROSS APPLY dans MySQL ?

DDD
DDDoriginal
2024-12-13 10:52:12815parcourir

How Can I Achieve the Functionality of CROSS APPLY in MySQL?

Application croisée/externe dans MySQL

Bien que MySQL prenne en charge un sous-ensemble de fonctionnalités ANSI SQL, CROSS APPLY n'en fait pas partie. Pour obtenir des fonctionnalités similaires, des approches alternatives doivent être utilisées.

Approximation directe : sous-requête corrélée dans la jointure

Votre approximation directe la plus proche implique une jointure avec une sous-requête corrélée dans le prédicat :

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
        )

Alternative simplifiée : corrélation directe Sous-requête

Si vous n'avez besoin que d'un seul champ de la table cible, vous pouvez utiliser une sous-requête corrélé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

Cette approche vous permet de récupérer le champ souhaité valeur sans avoir besoin d’une jointure.

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