У меня есть база данных SQLite, где мне нужно удалить записи из таблицы «многие ко многим», основываясь на результатах запроса, где должны быть соблюдены 2 критерия для каждой строки.
В качестве примера возьмем 2 таблицы :
oldEvents <select_query>
user_id | event_id qry_user_id | qry_event_id
---------+---------- -------------+-------------
1 | aaa 2 | aaa
2 | aaa 3 | bbb
2 | bbb 1 | ccc
3 | bbb
1 | ccc
3 | ccc
Из таблицы oldEvents я хочу удалить каждую строку, которая появляется в запросе, чтобы получилось:
oldEvents
user_id | event_id
---------+----------
1 | aaa
2 | bbb
3 | ccc
До сих пор я использовал громоздкий DELETE запрос, который объединяет qry_user_id и qry_event_id и использует их в подпункте EXISTS:
DELETE FROM oldEvents
WHERE EXISTS
(
SELECT user_id||event_id AS deleteCombo
FROM oldEvents
WHERE deleteCombo IN
(
SELECT qry_user_id||qry_event_id
FROM
<select_query>
)
)
Это работает, но трудно читаемо и не масштабируется, если в сцену попадет еще одна переменная.
Я не могу повторить строку select_query в предложении AND, поскольку сам по себе это довольно сложный запрос (triple-JOIN).
Я мог бы записать данные запроса во временную таблицу, но предпочел бы не делать этого.
Кто-нибудь предлагает, как написать DELETE, которая принимает несколько критериев WHERE из запроса?