如何解决Postgresql 中的 SQL Server MERGE 语句?
merge into Mytable WITH (HOLDLOCK) as dst
using (select @mId as MId,@up as UP,@termsAccepted as TermsAccepted,@AnalyticsAccepted as AnalyticsAccepted,@EssentialCookiesPolicyWasAccepted as EssentialAccepted,) as src on dst.MId = src.MId and dst.UP = src.UP
when matched then
update set dst.TermsAccepted = src.TermsAccepted,dst.AnalyticsAccepted = src.AnalyticsAccepted,dst.EssentialAccepted = src.EssentialAccepted,when not matched then
insert(MId,UP )
values(src.MId,src.UP)
试图将其转换为 postgres,但似乎无法找到合并语法替换的原因?
尝试了一个递归查询,但对查询的深度有点迷茫?
WITH f AS (
select mId as MId,up as UP,) as src on dst.MId = src.MId and dst.UP = src.UP
)
INSERT INTO myTable (MId,UP)
SELECT src.MId,src.UP
FROM src
WHERE NOT EXISTS (
insert(MId,UP )
values(src.MId,src.UP)
解决方法
不确定 Microsoft SQL server 语句究竟做了什么,但您可以尝试以下操作:
INSERT INTO mytable (mid,up) VALUES ($1,$2)
ON CONFLICT (mid,up)
DO UPDATE SET mid = EXCLUDED.mid,up = EXCLUDED.up;
这需要对 (mid,up)
的唯一约束。
您问题中 UPDATE
分支中的列具有不同的名称,但这对我来说没有任何意义。根据需要替换详细信息!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。