Как удалить записи в другой таблице mysql, только если все соответствующие записи были помечены - PullRequest
1 голос
/ 29 февраля 2020
table_a
user_id  canon_id
1       1000
2       1000
3       1000
11      4344
7       2023
8       2023
10      2023
12      3333

table_b
user_id  flag
1        0
2        0
3        1
11       1
7        1
8        1
10       1
12       0

В вышеупомянутом случае, user_ids, соответствующие 2023 и 4344, должны быть удалены, но 1000 и 3333 не должны, потому что некоторые записи равны 0. Операция удаления должна работать только с таблицей table_a и сохранять неизменной table_b

Ответы [ 2 ]

1 голос
/ 29 февраля 2020

Вы можете использовать join:

delete a
    from table_a a join
         (select user_id
          from table_b b
          group by user_id
          having sum(flag <> 1) = 0
         ) bu
         on a.user_id = bu.user_id;
1 голос
/ 29 февраля 2020

Вы можете использовать not exists для удаления записей из первой таблицы (я назвал ее a), для которой нет другой записи в другой таблице (называемой b) с теми же user_id и flag установите на 0:

delete from a
where not exists (select 1 from b where b.user_id = a.user_id and b.flag = 0)

Обратите внимание, что это также удалит записи в a, которые не имеют соответствующей записи в b. Если вы хотите избежать этого, вам нужен еще один подзапрос:

delete from a
where 
    not exists (select 1 from b where b.user_id = a.user_id and b.flag = 0)
    and exists (select 1 from b where b.user_id = a.user_id)
...