多くの列を含む 2 つのテーブル A と B があり、そのうちの 2 つは SKU と Typedesc を使用しています。
A と B を sku と typedesc で結合してテーブル C を作成しました
create table C as
select A.*
from A inner join
B
on A.sku=B.sku and trim(A.typedesc)=trim(B.typedesc)
Cには約があります。130,000 レコード
Cに存在するAの行を削除したい
delete from A A1
where exists (select 1
from C c1
where A1.sku=c1.sku and trim(A1.typedesc)=trim(c1.typedesc)
)
145,000行が削除されたと言われています。
余分な 15,000 行はどこから来たのですか? 削除クエリに何か問題がありますか? したがって、2 つのテーブルを結合すると、C も 145,000 になるはずですが、代わりに 130,000 しかありません!! これはなぜですか?A または B には主キーが含まれていません。
A から B を直接削除しても、削除された行数は 145,000 のままです。
delete from A A1
where exists (select 1
from B b1
where A1.sku=b1.sku and trim(A1.typedesc)=trim(b1.typedesc)
)