Как удалить записи в одной таблице на основе значений в другой таблице? - PullRequest
7 голосов
/ 28 ноября 2011

Вот две таблицы:

table1

cm_id   cost
1       6.52
2       16.52
3       2.12
4       7.14
5       19.09
6       11.52
7       0.12

table2

um_id   order_num   name
1       517         tommy
2       518         bobby
3       519         scotty
4       520         faris
5       521         justine
6       522         sadie
7       523         nicole

cm_id и um_id представляют одну и ту же вещь, поэтому стоимость может быть привязана к каждому заказучисло, т. е.

SELECT table1.cm_id, table1.cost, table2.order_num, table2.order_num
FROM table1, table2
WHERE table1.cm_id=table2.um_id;

Что такое отдельный оператор SQL, который я могу использовать для удаления строк из таблицы1, где порядковый номер в таблице2 находится между 518 и 520?

Ответы [ 4 ]

17 голосов
/ 28 ноября 2011
delete 
from table1
where cm_id IN (select um_id from table2 where order_num between 518 and 520)
8 голосов
/ 28 ноября 2011
DELETE table1
FROM   table1 INNER JOIN table2 ON table1.cm_id = table2.um_id
AND    (table2.order_num BETWEEN 518 AND 520)

--OR

DELETE 
FROM  table1
USING table1 INNER JOIN table2 ON table1.cm_id = table2.um_id
WHERE   (table2.order_num BETWEEN 518 AND 520)

EDIT:

Был дубликат FROM, и запрос был изменен согласно Andriy M комментариям.

5 голосов
/ 27 июня 2013

Я предпочитаю этот способ

delete from table1
using table1, table2
where table1.cm_id = table2.um_id
and table2.order_num >= 518
and table2.order_num <= 520;
1 голос
/ 28 ноября 2011

использовать DELETE с подзапросом:

DELETE * FROM table1 WHERE table1.cm_id IN (SELECT table2.um_id FROM table2 WHERE order_num>=518 and order_num<=520)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...