sql – Oracle:快速NOT IN用于多列
发布时间:2020-12-12 06:40:12 所属栏目:MsSql教程 来源:网络整理
导读:我需要同步两个表.我们假设这些表包含以下列: Table1: A,B,C,D Table2: A,E 我需要在Table1中找到这样的行,表2中没有相应的(A,C)值的条目,然后将E计算为F(D)并更新Table2. 如果我需要匹配,例如只有A,我会写下面的查询: SELECT * FROM Table1 WHERE A NOT IN
我需要同步两个表.我们假设这些表包含以下列:
Table1: A,B,C,D Table2: A,E 我需要在Table1中找到这样的行,表2中没有相应的(A,C)值的条目,然后将E计算为F(D)并更新Table2. 如果我需要匹配,例如只有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)在两个表中都是NOT NULL,那么NOT IN和NOT EXISTS都很可能(在我试过的verisons上)生成相同的执行计划.如果(a,c)被声明为可为空,但是你知道这些列实际上不是null,你可以通过添加“AND a is not null AND b not not null来欺骗优化器进行散列反连接对于您的查询,AND c不为空. (您可能还需要在子查询中添加/ * HASH_AJ * /提示.) 此外,以下查询不相同: from table1 where (a,c) not in (select a,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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |