1. ホーム
  2. mysql

[解決済み] MySQL サブクエリを条件とする DELETE FROM

2022-12-01 07:03:22

質問

私はこのようなクエリを実行しようとしています。

DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (
    SELECT DISTINCT(th1.tid)
    FROM term_hierarchy AS th1
    INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
    WHERE th1.parent = 1015
);

おそらくお分かりのように、同じtidに他の親がいる場合、1015の親リレーションを削除したいのです。しかし、それは私に構文エラーをもたらします。

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS th
WHERE th.parent = 1015 AND th.tid IN (
  SELECT DISTINCT(th1.tid)
  FROM ter' at line 1

ドキュメントを確認し、サブクエリを単独で実行しましたが、すべてチェックアウトされているようです。何が間違っているのか、どなたかおわかりになりますか?

更新 : 下記のように、MySQLは削除するテーブルを条件のサブクエリで使用することを許可していません。

どのように解決するのですか?

削除対象テーブルを指定することができません。

回避策

create table term_hierarchy_backup (tid int(10)); <- check data type

insert into term_hierarchy_backup 
SELECT DISTINCT(th1.tid)
FROM term_hierarchy AS th1
INNER JOIN term_hierarchy AS th2 ON (th1.tid = th2.tid AND th2.parent != 1015)
WHERE th1.parent = 1015;

DELETE FROM term_hierarchy AS th
WHERE th.parent = 1015 AND th.tid IN (select tid from term_hierarchy_backup);