table1
refno status
1 A
2 A
6 A
3 A
table2
refno itemcode qty
1 1 5
1 2 0
3 8 0
3 1 0
2 4 3
6 7 0
如果[table2]中找不到[refno],我需要一个将删除[table2]中qty = 0的所有行同时删除[table1]中的行的查询
鉴于上面的示例,查询应保留以下输出:
table1
refno status
1 A
2 A
table2
refno itemcode qty
1 1 5
2 4 3
由于
答案 0 :(得分:0)
以下查询将DELETE
来自两个表的所有记录:
DELETE t1.*, t2.*
FROM Table t1
LEFT JOIN
(
SELECT *
FROM Table2
WHERE qty = 0
) t2 ON t1.refno = t2.refno
WHERE t2.refno IS NULL
答案 1 :(得分:0)
您可以在事务中编写2个delete语句,以确保它是一个原子操作。
答案 2 :(得分:0)
使用mysql,因为允许多表删除
delete t1, t2
from table1 t1
left join table2 t2 on t1.refno = t2.refno
where t2.qty = 0 or t2.refno is null;
但这会从table1中删除行1, A
(因为我们在T2中有refno = 1
和qty = 0
的关系
我没有看到一个解决方案(可能是一个),其中table2中的行1, 2, 0
将被删除,而table1中的行1, A
将不会。
所以,我认为解决方案必须是存储过程(或2个查询)
create procedure CleanTable1Table2()
begin
delete from table2 t2
where qty = 0;
delete from table1 t1
where not exists (select null from table2 t2
where t2.refno= t1.refno);
end