Oracle UPSERT:使用不在排除表中的源列

Oracle UPSERT:使用不在排除表中的源列,oracle,postgresql,merge,upsert,Oracle,Postgresql,Merge,Upsert,我正在尝试将oracle合并语句转换为postgreSQL>9.5。 不幸的是,postgres=您可以将该大小写表达式移动到SELECT语句: INSERT INTO tgt (text, normname, ptid, name_id, languagecode) SELECT nam.text, case islink when 1 then norm.originaltext else normalizedtext en

我正在尝试将oracle合并语句转换为postgreSQL>9.5。
不幸的是,postgres=您可以将该大小写表达式移动到SELECT语句:

INSERT INTO tgt (text, normname, ptid, name_id, languagecode)
SELECT nam.text, 
       case islink 
         when 1 then norm.originaltext
         else normalizedtext
       end as normname,
       norm.entryid AS ptid,
       nam.name_id AS name_id,
       :langCode as languagecode
FROM norm
  JOIN nam ON norm.name_id = nam.name_id
GROUP BY originaltext
ON CONFLICT (text, languagecode)
DO UPDATE
    SET name_id = excluded.name_id,
           ptid = excluded.ptid,
           normname = excluded.normname
    WHERE ptid IS NULL;

在插入过程中,norm.islink中的值被放入列languagecode中,这一点从一开始就看起来是错误的。但是如果这确实是正确的,您需要使用目标的表列:CASE WHEN excluded.languagecode=1然后…是的,谢谢您我刚刚注意到我在SELECT中忘记了languagecode。但如果没有匹配项,我不希望插入该值。我可以使用一个伪列名吗?可能它没有连接到tgt表现在您的select语句包含更多的列,您已经插入了目标列-即使没有ON冲突,这也无法工作。