我有两个表。其中一个(我们称之为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
)
;
有人知道是否有一种方法可以有效地完成这一点吗?
1条答案
按热度按时间0yycz8jy1#
数据库不喜欢更新和删除过程。它们会让人筋疲力尽。根据您的应用程序(请仔细检查!!!),您可以尝试以下操作: