MySQL の新しいバージョンである 8.0 は、 Common Table Expressionsをサポートするようになりました。
マニュアルによると:
WITH 句は、SELECT、UPDATE、および DELETE ステートメントの先頭で使用できます。
WITH ... SELECT ...
WITH ... UPDATE ...
WITH ... DELETE ...
それで、次の表を考えると、私は考えました:
ID lastName firstName
----------------------
1 Smith Pat
2 Smith Pat
3 Smith Bob
次のクエリを使用できます。
;WITH ToDelete AS
(
SELECT ID,
ROW_NUMBER() OVER (PARTITION BY lastName, firstName ORDER BY ID) AS rn
FROM mytable
)
DELETE FROM ToDelete
SQL Serverでできるように、テーブルから重複を削除します。
私が間違っていたことが判明しました。DELETE
MySQL Workbench からステートメントを実行しようとすると、次のエラーが表示されます。
エラー コード: 1146。テーブル 'todelete' が存在しません
UPDATE
CTE を使用して実行しようとすると、エラー メッセージも表示されます。
それで、私の質問は、MySQL のorステートメントWITH
のコンテキストで節をどのように使用できるかということです (バージョン 8.0 のマニュアルで引用されているように)。UPDATE
DELETE