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

ecbunoof  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(289)

我有一个表,它有主键coa\u key,它有7个字段,分别标记为extract\u code1,extract\u 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外,union all与上述相同,然后重复,直到选中所有7个代码。
有没有人能帮我写一个更好的方法,这样我就不会上吊了?

yws3nbqq

yws3nbqq1#

这只是一个猜测,因为你还没有发布一个个人资料的“挂”执行,但听起来你可以使用 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_key 以及 extract_code 不能为空。如果它们可以为空,那么您需要决定如何处理这种情况。

相关问题