ホームページ > データベース > mysql チュートリアル > MySQL で CROSS/OUTER APPLY 機能をレプリケートするにはどうすればよいですか?

MySQL で CROSS/OUTER APPLY 機能をレプリケートするにはどうすればよいですか?

DDD
リリース: 2024-12-07 13:07:16
オリジナル
478 人が閲覧しました

How to Replicate CROSS/OUTER APPLY Functionality in MySQL?

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

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