sql 查询 删除属于多对多表 PostgreSQL 中的用户的行



>我有 3 张桌子

dragons
id, name, age, creation_date
users
id, name, user, pass
users_dragons
user_id, dragon_id

这个想法是进行一个查询,从 dragon 表中删除年龄低于给定的行,并且属于使用多对多表的给定用户。我打算使用存在语句,但我对SQL有点陌生,仍然不完全理解。

delete from dragons where id in (
select d.id from dragons d, users u, users_dragons ud where d.age < :YourGivenAge and ud.dragon_id = d.id and ud.user_id in (
select id from users where name = :YourGivenName ));

对于级联删除,只需存储 id,然后首先从users_dragons表中删除dragon_id = stored id

我倾向于建议:

delete from dragons d
where d.age < :age and
exists (select 1
from users_dragons ud
where ud.dragon_id = d.id and ud.user_id = :user_id
);