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] が見つからない場合、qty=0 の [table1] の行を同時に削除する [table2] のすべての行を削除するクエリが必要です。

上記の例を考えると、クエリは次の出力を保持する必要があります。

table1
refno status
1     A
2     A

table2
refno itemcode qty
1     1        5
2     4        3

ありがとう

4

3 に答える 3

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に関係があるためrefno = 1qty = 0

1, 2, 0そして、table2からの行が削除さ1, Aれ、table1からの行が削除されないという解決策は見当たりません(おそらく1つはそうなるでしょう) 。

したがって、ソリューションはストアドプロシージャ(または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 に答える
0

次のクエリはDELETE、2 つのテーブルのすべてのレコードを取得します。

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 に答える