Удаление нескольких строк в sql

#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
);