以下是两个表格:
表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之间?
答案 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;