我有两个包含许多列的表A和B,其中两个正在使用的是SKU和Typedesc。
我通过在sku和typedesc
上加入A和B创建了一个表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条记录
现在我要删除A中存在于C
中的行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行是从哪里来的?我的删除查询有问题吗?所以当我加入两张桌子时,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)
)
答案 0 :(得分:0)
EXISTS
看起来没问题,但是没有看到哪些行被删除,很难说出问题是什么,我不想再查看145,000行了。)
尝试这种替代方案,看看它是否有任何区别:
DELETE FROM A
WHERE (SKU, TRIM(TypeDesc)) IN (SELECT SKU, TRIM(TypeDesc) FROM B)