删除其他表中的行

时间:2013-06-04 20:48:19

标签: sql oracle

我有两个包含许多列的表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)
                 )

1 个答案:

答案 0 :(得分:0)

EXISTS看起来没问题,但是没有看到哪些行被删除,很难说出问题是什么,我不想再查看145,000行了。)

尝试这种替代方案,看看它是否有任何区别:

DELETE FROM A
WHERE (SKU, TRIM(TypeDesc)) IN (SELECT SKU, TRIM(TypeDesc) FROM B)