db2 如何删除有多个列与另一个表匹配的行?

hzbexzde  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(156)

我有两个表。其中一个(我们称之为table1)看起来有点像这样:

account_number | offer_code
---------------|-----------
1              | 123
1              | 456
2              | 123

另一个表(我们称之为table2)看起来有点像这样:

account_number | offer_code
---------------|-----------
1              | 123

我想从table1中删除account_number和offer_code与table2中某行匹配的所有行。因此,table1将如下所示:

account_number | offer_code
---------------|-----------
1              | 456
2              | 123

我尝试了以下方法,但它无法运行:

DELETE  
FROM    TABLE1 A
INNER JOIN
        TABLE2 B
ON      A.ACCOUNT_NUMBER = B.ACCOUNT_NUMBER
AND     A.OFFER_CODE = B.OFFER_CODE
;

我也尝试了以下方法,它看起来可以运行,但是两个表中的数据量(table1中有6550万行,table2中有900万行)意味着要花很长时间才能运行(我被迫在3小时后终止查询)。

DELETE
FROM    TABLE1
WHERE   CONCAT(ACCOUNT_NUMBER, OFFER_CODE) IN
        (
        SELECT  CONCAT(ACCOUNT_NUMBER, OFFER_CODE)
        FROM    TABLE2
        )
;

有人知道是否有一种方法可以有效地完成这一点吗?

0yycz8jy

0yycz8jy1#

数据库不喜欢更新和删除过程。它们会让人筋疲力尽。根据您的应用程序(请仔细检查!!!),您可以尝试以下操作:

create table table1_tmp
select * from table1
minus
select * from table2;

alter table table1 rename to table1_tmp2;
alter table table1_tmp rename to table1;

相关问题