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