如何从一个 table 中删除 DB2 中另一个 table 中存在的行?
How can I delete from one table where rows exist in another table in DB2?
我想要实现的目标非常简单,但由于某种原因,我无法让它工作——部分原因是我找不到任何特定于 DB2 的帮助。
我想删除 table 中的所有记录,如果它们存在于另一个 table 中(这些都是非常大的 table,有 1m+ 条记录)。这是我尝试过的:
DELETE FROM dave.Last
WHERE NULBERS IN
(Select Substr(MSISDN,4) from a1313495.COMBINED_NUMBERS);
dave.Last
是 table 我要有选择地从中删除。我不知道这是否有效,但 运行 很长一段时间,我不得不取消它。
我也试过了
DELETE t1.NUMBERS
FROM dave.Last t1
LEFT JOIN a1313495.COMBINED_NUMBERS t2 ON Substr(t2.MSISDN,4) = t1.NUMBERS
WHERE Substr(t2.MSISDN,4) = t1.NUMBERS
这也不起作用,因为它 returns SQL Error: DB2 SQL Error: SQLCODE=-104
。令人惊讶的是,当我将“DELETE”更改为“SELECT”时,上述查询有效。
我怎样才能做到这一点?由于 tables.
的大小,我也需要使用最佳方法
嗯。 . .我建议使用 expression-based 索引:
create index idx_combined_numbers_msisdn_4
on a1313495.COMBINED_NUMBERS(substr(MSISDN, 4));
然后使用EXISTS
:
DELETE FROM dave.Last l
WHERE EXISTS (SELECT 1
FROM a1313495.COMBINED_NUMBERS cn
WHERE l.NUMBERS = SUBSTR(MSISDN,4)
);
我想要实现的目标非常简单,但由于某种原因,我无法让它工作——部分原因是我找不到任何特定于 DB2 的帮助。
我想删除 table 中的所有记录,如果它们存在于另一个 table 中(这些都是非常大的 table,有 1m+ 条记录)。这是我尝试过的:
DELETE FROM dave.Last
WHERE NULBERS IN
(Select Substr(MSISDN,4) from a1313495.COMBINED_NUMBERS);
dave.Last
是 table 我要有选择地从中删除。我不知道这是否有效,但 运行 很长一段时间,我不得不取消它。
我也试过了
DELETE t1.NUMBERS
FROM dave.Last t1
LEFT JOIN a1313495.COMBINED_NUMBERS t2 ON Substr(t2.MSISDN,4) = t1.NUMBERS
WHERE Substr(t2.MSISDN,4) = t1.NUMBERS
这也不起作用,因为它 returns SQL Error: DB2 SQL Error: SQLCODE=-104
。令人惊讶的是,当我将“DELETE”更改为“SELECT”时,上述查询有效。
我怎样才能做到这一点?由于 tables.
的大小,我也需要使用最佳方法嗯。 . .我建议使用 expression-based 索引:
create index idx_combined_numbers_msisdn_4
on a1313495.COMBINED_NUMBERS(substr(MSISDN, 4));
然后使用EXISTS
:
DELETE FROM dave.Last l
WHERE EXISTS (SELECT 1
FROM a1313495.COMBINED_NUMBERS cn
WHERE l.NUMBERS = SUBSTR(MSISDN,4)
);