#sqlite
#sqlite
Вопрос:
У меня есть две такие таблицы:
Table L
A | B
C | D
Table K
A | B
C | D
E | F
etc etc
Я хочу удалить во table K
всех строках, которые существуют Table L
.
Однако, когда я удаляю, это устраняет только первую строку. Я хотел бы, чтобы, если бы больше строк, вставленных в Table L
которые совпадают со строками в Table K
удалении, также работали, то есть не нужно было выполнять «ручное» удаление
Заранее спасибо
Комментарии:
1. mysql или sqlite? удалите неправильный тег
Ответ №1:
Для этого вы можете использовать delete с псевдонимом и экзистенциальным квантором:
delete k
from K as k
where exists (
select * from L as l
where l.col1=k.col1 and l.col2=k.col2
)
Комментарии:
1. @SOaddict Правильно. Спасибо!
2. Спасибо, мой запрос был в основном правильным, за исключением того, что у меня было = после предложения where . это помогло!
Ответ №2:
DELETE FROM K
WHERE ( Col1,Col2 )
NOT IN
(
SELECT k1.Col1, k1.Col2
FROM K k1
LEFT OUTER JOIN L l1
ON k1.Col1 = l1.Col1
AND k1.Col2 = l1.Col2
WHERE l1.Col1 IS NULL OR l1.Col2 IS NULL
);