gpt4 book ai didi

sql - Oracle:多列的快速 NOT IN

转载 作者:行者123 更新时间:2023-12-04 09:07:51 25 4
gpt4 key购买 nike

我需要同步两个表。假设这些表包含以下列:

Table1: A, B, C, D  
Table2: A, B, C, E

我需要在表 1 中找到没有相应条目的行 (A, B, C)表 2 中的值,然后将 E 计算为 F(D) 并更新表 2。

如果我需要匹配例如只有 A,我会写以下查询:
SELECT * FROM Table1 WHERE A NOT IN (SELECT A FROM Table2)

多列模拟似乎太慢了:
SELECT * FROM Table1 WHERE A NOT IN (SELECT A FROM Table2)
AND B NOT IN (SELECT B FROM Table2)
AND C NOT IN (SELECT C FROM Table2)

编写此类查询的最佳方法是什么?

最佳答案

如果 (a,b,c) 在两个表中都不是 NULL,则 NOT IN 和 NOT EXISTS 很可能(在我尝试过的版本上)生成相同的执行计划。

如果 (a,b,c) 被声明为可空,但你 知道 列实际上不为空,您可以通过在查询中添加“AND a is not null AND b is not null AND c is not null”来欺骗优化器进行哈希反连接。 (您可能还需要在子查询中添加/*+ HASH_AJ */提示。)

此外,以下查询不相同:

 from table1
where (a,b,c) not in (select a,b,c from table2)

from table1
where a not in(select a from table2)
and b not in(select b from table2)
and c not in(select c from table2)

关于sql - Oracle:多列的快速 NOT IN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4345565/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com