サブクエリを利用してSELECTした結果をDELETEするSQL

目次

スポンサードリンク

SELECT文で指定した条件に合致したレコードだけ削除したいときに利用できるテクニックを紹介します。

サブクエリ を利用する方法

サブクエリとは、別の SQL 文の中に埋め込まれた SQL 文のことです。下記例では、DELETE文の中にSELECT文を埋め込んでいます。

DELETE FROM テーブル名 WHERE 項目名 IN ( SELECT 項目名 FROM テーブル名 WHERE 条件 );

外側のDELETE文では削除対象のテーブル名を指定しています。WHERE句では削除する条件となる項目名を指定します。良くあるのは、レコードを一意に特定できるIDを指定することが多いかと思います。括弧で囲まれた部分がサブクエリで、内側のSELECT文で削除したいデータの条件を指定しています。

下記はより具体的な例です。このSQLでは、userテーブルから、cityカラムが Tokyo のレコードを削除しています。

DELETE FROM user 
WHERE id IN (
   SELECT id 
    FROM user 
    WHERE city = 'Tokyo' );


SQLパズル 第2版: プログラミングが変わる書き方/考え方
SQLに関する実践的な問題75問について解説した書籍。SQLで解決するものからテーブル設計自体を見直す解決方法など実践的なノウハウが学べる良書です。