如何根据另一个表中的值删除一个表中的记录?

时间:2011-11-28 05:24:15

标签: mysql sql

以下是两个表格:

表1

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

表2

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语句来删除table1中的行,其中table2中的order_num介于518和520之间?

5 个答案:

答案 0 :(得分:17)

delete 
from table1
where cm_id IN (select um_id from table2 where order_num between 518 and 520)

答案 1 :(得分:8)

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)

编辑:

重复FROM,并且根据Andriy M条评论更改了查询。

答案 2 :(得分:5)

我更喜欢这种方式

delete from table1
using table1, table2
where table1.cm_id = table2.um_id
and table2.order_num >= 518
and table2.order_num <= 520;

答案 3 :(得分:1)

将DELETE与子查询一起使用:

DELETE * FROM table1 WHERE table1.cm_id IN (SELECT table2.um_id FROM table2 WHERE order_num>=518 and order_num<=520)

答案 4 :(得分:0)

由于IN有一些性能限制,我们可以将delete命令与简单的联接查询一起使用

delete x from table1 x,table2 y where x.cm_id=y.um_id;