Heim >Datenbank >MySQL-Tutorial >Wie repliziere ich die CROSS/OUTER APPLY-Funktionalität in MySQL?
CROSS/OUTER APPLY in MySQL
MySQL bietet keine direkte Unterstützung für die CROSS APPLY-Syntax, es können jedoch alternative Ansätze verwendet werden, um eine ähnliche Funktionalität zu erreichen .
Verschachtelt Unterabfrage:
In MySQL besteht eine häufige Alternative darin, eine korrelierte Unterabfrage als Prädikat in einer JOIN-Anweisung zu verwenden. Dadurch wird sichergestellt, dass die Ergebnisse der Unterabfrage für jede Zeile in der äußeren Abfrage ausgewertet werden.
Beispiel:
Gegebene Abfrage:
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
Die entsprechende Abfrage mit einer verschachtelten Unterabfrage wäre:
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 )
Direkt Unterabfrage:
In Fällen, in denen nur ein einzelnes Feld aus der Zieltabelle benötigt wird, kann eine korrelierte Unterabfrage direkt in die SELECT-Anweisung integriert werden:
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
Das obige ist der detaillierte Inhalt vonWie repliziere ich die CROSS/OUTER APPLY-Funktionalität in MySQL?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!