我需要替换掉用union all写的代码,因为它在执行过程中被挂起了

问题描述 投票:0回答:1

我有一个主键为coa_key的表,它有7个字段,标签为extract_code1,extract_code2...。

现在写的代码选择带有code1的主键,并将其插入到表2中,如果它不存在于表2中。

INSERT INTO ef_extract_codes_t
  SELECT coa_key, extract_code1
  FROM ef_load_it l
  WHERE extract_code1 IS NOT NULL AND
        NOT EXISTS (SELECT e.coa_key||e.extract_code
                    FROM   ef_extract_codes_t e
                    WHERE  e.coa_key||e.extract_code = l.coa_key||extract_code1)

除了code2之外,所有的联合都和上面一样,然后重复,直到7个代码都被选中。

谁能帮我提供一个更好的写法,以免挂掉?

sql oracle union-all
1个回答
0
投票

这只是一个猜测,因为你没有发布 "挂起 "执行的配置文件,但听起来你可以使用的是 MERGE 命令。

但是,如果你的语句在功能上是正确的,而且你的索引是足够的,你可能不必走到重写的极端。因为大多数人可能会 用你给出的表达式创建索引。e.coa_key||e.extract_code我建议更换

e.coa_key||e.extract_code = l.coa_key||extract_code1

与此。

e.coa_key = l.coa_key and e.extract_code = l.extract_code1

我相信这将工作,如果 coa_keyextract_code 不能为空。如果它们可以为空,那么你需要决定如何处理这种情况。

© www.soinside.com 2019 - 2024. All rights reserved.