1
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

谢谢

4

3 回答 3

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
于 2012-10-01T09:06:51.460 回答
0

您可以在事务中编写 2 个删除语句以确保它是原子操作。

于 2012-10-01T09:07:59.407 回答
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;

但这1, A将从 table1 中删除行(因为我们在 T2 中有一个关系 where refno = 1and qty = 0

而且我看不到解决方案(也许会),其中1, 2, 0table2 中的行将被删除,而1, Atable1 中的行将不会被删除。

所以,我认为解决方案必须是一个存储过程(或 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
于 2012-10-01T09:12:17.283 回答