1

我有两个表 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 条记录

现在我想删除 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 行是从哪里来的?我的删除查询有问题吗?所以当我加入两个表时,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)
                 )
4

1 回答 1

0

看起来不错,但是如果EXISTS没有看到哪些行被删除,就很难判断问题出在哪里,而且我不想像你一样查看 145,000 行:)

试试这个替代方案,看看它是否有任何不同:

DELETE FROM A
WHERE (SKU, TRIM(TypeDesc)) IN (SELECT SKU, TRIM(TypeDesc) FROM B)
于 2013-06-04T21:06:01.943 回答