如果在table2中找不到引用,将从table1中删除记录的查询

时间:2012-10-01 09:02:47

标签: mysql

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

由于

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 = 1qty = 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