ホームページ > データベース > mysql チュートリアル > MySQL で相関サブクエリはどのようにして CROSS APPLY を置き換えることができますか?

MySQL で相関サブクエリはどのようにして CROSS APPLY を置き換えることができますか?

Susan Sarandon
リリース: 2024-12-05 01:33:22
オリジナル
702 人が閲覧しました

How Can Correlated Subqueries Replace CROSS APPLY in MySQL?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート