MySQL の CROSS/OUTER APPLY
T-SQL で広く使用されている演算子であるにもかかわらず、MySQL は CROSS APPLY 構文をネイティブにサポートしていません。これは、MySQL 環境で CROSS APPLY の機能を利用する必要がある開発者にとって課題となる可能性があります。
CORRELATED SUBQUERIES について
MySQL では、CROSS APPLY 機能を近似するための一般的なアプローチ相関サブクエリを使用することです。相関サブクエリは、外部クエリの列を参照するサブクエリです。相関サブクエリを SELECT ステートメントまたは結合条件に埋め込むことで、CROSS APPLY と同様の結果を得ることができます。
例 1: 述語として相関サブクエリを使用した結合
検討してください次のクエリは、CROSS APPLY を使用して 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
MySQL には CROSS APPLY サポートがないため、より適切なアプローチは、述語として相関サブクエリとの結合を使用することです:
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 )
このクエリでは、相関サブクエリは、ORD_HISTORY から適切な値をフェッチし、それを結合として埋め込むために使用されます。条件。
例 2: SELECT ステートメントで相関サブクエリを直接使用する
ターゲット テーブルの 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 APPLY 機能にほぼ似ており、ネイティブの CROSS APPLY サポートがない場合でも複雑なデータ取得操作を実行できます。
以上がMySQL で相関サブクエリはどのようにして CROSS APPLY を置き換えることができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。