ホームページ >データベース >mysql チュートリアル >共通テーブル式 (CTE) で計算された値を使用してテーブル レコードを更新するにはどうすればよいですか?
共通式を使用したレコードの更新 (CTE)
CTE を使用してテーブル レコードを更新する場合は、CTE の性質に必ず注意してください。 CTE は、定義されたクエリ中にのみ存在する一時的なコレクションです。したがって、CTE に加えられた変更はソース テーブルに直接影響しません。
この制限を克服するには、CTE に基づいてレコードを更新するための別のアプローチが必要です。効率的なアプローチは、CTE 内にサブクエリを作成して必要な値を計算することです。このサブクエリを UPDATE ステートメントで使用して、計算された値をターゲット テーブルに適用できます。
CTE で計算された値に基づいて PEDI_InvoiceDetail
テーブルの DocTotal
列を更新する次の例を考えてみましょう。
<code class="language-sql">;WITH CTE_DocTotal AS ( SELECT InvoiceNumber, SUM(Sale + VAT) AS DocTotal FROM PEDI_InvoiceDetail GROUP BY InvoiceNumber )</code>この CTE は、各
の InvoiceNumber
を計算し、結果を一時コレクションに保存します。これらの値で DocTotal
テーブルを更新するには、CTE でサブクエリを使用できます: PEDI_InvoiceDetail
<code class="language-sql">;WITH T AS ( SELECT InvoiceNumber, SUM(Sale + VAT) OVER(PARTITION BY InvoiceNumber) AS NewDocTotal FROM PEDI_InvoiceDetail ) UPDATE T SET DocTotal = NewDocTotal</code>このサブクエリでは、
句を持つ OVER
関数が、SUM()
で定義された各パーティション (グループ) に対して新しい InvoiceNumber
を計算します。このサブクエリは T にエイリアスされ、計算された値で DocTotal
列を更新するために UPDATE ステートメントで使用されます。 DocTotal
テーブル内のレコードを効果的に更新し、変更がソース テーブルに確実に保持されるようにすることができます。 PEDI_InvoiceDetail
以上が共通テーブル式 (CTE) で計算された値を使用してテーブル レコードを更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。