CROSS/OUTER APPLY dans MySQL
Bien qu'il s'agisse d'un opérateur largement utilisé dans T-SQL, MySQL ne prend pas en charge nativement la syntaxe CROSS APPLY . Cela peut présenter un défi pour les développeurs qui doivent utiliser les capacités de CROSS APPLY dans les environnements MySQL.
Comprendre les sous-requêtes corrélées
Dans MySQL, une approche commune pour rapprocher les fonctionnalités de CROSS APPLY consiste à utiliser des sous-requêtes corrélées. Une sous-requête corrélée est une sous-requête qui fait référence aux colonnes de la requête externe. En intégrant une sous-requête corrélée dans une instruction SELECT ou une condition de jointure, vous pouvez obtenir des résultats similaires à CROSS APPLY.
Exemple 1 : Joindre avec une sous-requête corrélée en tant que prédicat
Considérez la requête suivante, qui tente d'utiliser CROSS APPLY pour récupérer une valeur spécifique de ORD_HISTORY table :
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
En raison du manque de support CROSS APPLY par MySQL, une approche plus appropriée consiste à utiliser une jointure avec une sous-requête corrélée comme prédicat :
SELECT ORD.ID ,ORD.NAME ,ORD.DATE ,ORD_HISTORY.VALUE FROM ORD INNER JOIN ORD_HISTORY ON ORD_HISTORY.ID = (SELECT ORD_HISTORY.ID FROM ORD_HISTORY WHERE ORD.ID = ORD_HISTORY.ID AND ORD.DATE <= ORD_HISTORY.DATE ORDER BY ORD_HISTORY.DATE DESC LIMIT 1 )
Dans cette requête, la sous-requête corrélée est utilisée pour récupérer la valeur appropriée de ORD_HISTORY et l'intégrer en tant que jointure condition.
Exemple 2 : Utilisation d'une sous-requête corrélée directement dans l'instruction SELECT
Dans les cas où un seul champ de la table cible est requis, la sous-requête corrélée peut être incorporé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 exploitant les sous-requêtes corrélées, les développeurs peuvent se rapprocher efficacement de la fonctionnalité CROSS APPLY dans MySQL, permettant leur permettant d'effectuer des opérations complexes de récupération de données même en l'absence de support natif CROSS APPLY.
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!