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

sql query Delete rows that belongs to a user in a many-many table PostgreSQL

我有 3 table

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

想法是使用多对多 table 进行查询,从龙 table 中删除年龄小于给定且属于给定用户的行。我本来打算使用 exist 语句,但我对 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 table 中删除,其中 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
                 );