ホームページ > データベース > mysql チュートリアル > SQL で CTE を使用してテーブル レコードを更新するにはどうすればよいですか?

SQL で CTE を使用してテーブル レコードを更新するにはどうすればよいですか?

Susan Sarandon
リリース: 2025-01-08 14:43:10
オリジナル
822 人が閲覧しました

How Can I Update Table Records Using a CTE in SQL?

CTE を使用してテーブル レコードを更新します

SQL では、共通テーブル式 (CTE) と UPDATE ステートメントを使用してテーブル内のデータを変更できます。 CTE は、クエリで参照できるエイリアスまたは一時的な結果セットです。

CTE を使用してテーブル内のレコードを更新するには、次のようなクエリを使用できます。

<code class="language-sql">WITH CTE_DocTotal AS (
  SELECT SUM(Sale + VAT) AS DocTotal
  FROM PEDI_InvoiceDetail
  GROUP BY InvoiceNumber
)

UPDATE PEDI_InvoiceDetail
SET DocTotal = CTE_DocTotal.DocTotal;</code>
ログイン後にコピー

このクエリは、PEDI_InvoiceDetail テーブルの DocTotal 列の値を、CTE_DocTotal CTE の DocTotal 列の値で更新します。

ただし、あなたの場合、CTE 定義には CTE テーブルと PEDI_InvoiceDetail テーブル間のリンクがありません。このリンクを確立するには、次のようにパーティショニング句を CTE に追加します。

<code class="language-sql">WITH T AS (
  SELECT InvoiceNumber,
         DocTotal,
         SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal
  FROM PEDI_InvoiceDetail
)

UPDATE T
SET DocTotal = NewDocTotal;</code>
ログイン後にコピー

この変更されたクエリは、PEDI_InvoiceDetail テーブルの InvoiceNumber 列を含む T という名前の新しい CTE を作成します。これにより、InvoiceNumber による CTE の分割が可能になり、各請求書に対して NewDocTotal 値が正しく計算されるようになります。

UPDATE ステートメントは、計算された NewDocTotal 値を PEDI_InvoiceDetail テーブルの DocTotal 列に適用します。

以上がSQL で CTE を使用してテーブル レコードを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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