MySQL の CROSS/OUTER APPLY
MySQL には CROSS APPLY 構文の直接サポートがありませんが、代替アプローチを使用して同様の機能を実現できます。 .
入れ子サブクエリ:
MySQL では、一般的な代替方法は、相関サブクエリを JOIN ステートメントの述語として使用することです。これにより、サブクエリの結果が外側のクエリの各行に対して確実に評価されます。
例:
クエリの場合:
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
ネストされたサブクエリを使用した同等のクエリは次のようになります。 be:
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 )
直接サブクエリ:
ターゲット テーブルの 1 つのフィールドのみが必要な場合、相関サブクエリを直接実行できます。 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
以上がMySQL で CROSS/OUTER APPLY 機能をレプリケートするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。