11

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でできるように、テーブルから重複を削除します。

私が間違っていたことが判明しました。DELETEMySQL Workbench からステートメントを実行しようとすると、次のエラーが表示されます。

エラー コード: 1146。テーブル 'todelete' が存在しません

UPDATECTE を使用して実行しようとすると、エラー メッセージも表示されます。

それで、私の質問は、MySQL のorステートメントWITHのコンテキストで節をどのように使用できるかということです (バージョン 8.0 のマニュアルで引用されているように)。UPDATEDELETE

4

2 に答える 2