我有一个主键为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个代码都被选中。
谁能帮我提供一个更好的写法,以免挂掉?
这只是一个猜测,因为你没有发布 "挂起 "执行的配置文件,但听起来你可以使用的是 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
不能为空。如果它们可以为空,那么你需要决定如何处理这种情况。