以下功能怎样用一条语句实现,不用一个insert与update

ChinaITOldMan 2017-12-13 09:26:44
有两个表Tb1与Tb2都有字段F1、F2 、F3与F4,若tb1中F1、F2与tb2中F1、F2相同时,就用tb2的F3、F4更新tb1的F3、F4;
若tb2中的F1与F2在Tb1中不存在时候,就把这条记录插入到Tb1,一般我们用下面两条语句书写,一条Insert、一条Update;
请问有没有办法只用一条语句实现?

update tb1 set f3=b.f3, f4=b.f4 from tb1 a, tb2 b where a.f1=b.f1 and a.f2=b.f2
insert into tb1 select b.*from tb2 b left join tb1 on a.f1=b.f1 and a.f2=b.f2
where a.f1 IS NULl and a.f2 IS NULL

表ta、tb及查询结果如下图

...全文
164 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ChinaITOldMan 2017-12-13
  • 打赏
  • 举报
回复
谢谢两位大版本,请问SQL Server 除Mines、intersect等集合的运算命令外还有哪些集合命令或特殊命令?谢谢!
吉普赛的歌 2017-12-13
  • 打赏
  • 举报
回复
引用 3 楼 mcxhh2005 的回复:
请问SQL Server是不是只有企业版本才支持Merge这个功能?
SQL Server2008 或以上版本
ChinaITOldMan 2017-12-13
  • 打赏
  • 举报
回复
请问SQL Server是不是只有企业版本才支持Merge这个功能?
zjcxc 2017-12-13
  • 打赏
  • 举报
回复
不支持merge 的版本,可以用 before insert 触发器,在触发器中判断存在做update,不存在做 insert
zjcxc 2017-12-13
  • 打赏
  • 举报
回复
支持 meger 的版本上可以用 merge
merge tb1 a using tb2 b on a.f1=b.f1 and a.f2=b.f2
when matched then update set f3=b.f3, f4=b.f4
when not matched by target then insert(f1,f2,f3,f4) values(b.f1,b.f2,b.f3,b.f4);

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧