Oracle UPSERT:使用不在排除表中的源列
我正在尝试将oracle合并语句转换为postgreSQL>9.5。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
不幸的是,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冲突,这也无法工作。