Office中国论坛/Access中国论坛

标题: sql server 如何用联合查询更新到一张数据表 [打印本页]

作者: 天涯沦落20131    时间: 2020-3-25 13:28
标题: sql server 如何用联合查询更新到一张数据表
如:有四张表,表1:id,a,b,c,d;表2:id,e,f,g;表3:id,h,i,j,k ;表四:sid,id,a,b,c,d,e,f ,g,h,i,j,k-----如何通过联合查询数据更新至一张表
        select l. id,l.a,l.c,l.d,0 as e,0 as f, 0 as g, 0 as h, 0 as i, 0 as k from 表1 l
       union all
         select m.id,0 as a, 0 as b, 0 as c, m.e,m.f,m.g,0 as h,0 as i,0 as j, 0 as k from 表2 m
       union all
         select  n.id, 0 as a, 0 as b, 0 as c, 0 as e, 0 as f, 0 as g ,n.h,n.i,n.j,n.k from 表3 n
请高手指定如何将查询数据更新至表4,必免重复更新数据!谢谢!
作者: admin    时间: 2020-3-25 15:34
到底是新增还是修改。如果是新增数据,直接逐个追加到表4,不会重复的。若果是要修改表内容,需要对应ID啊
作者: roych    时间: 2020-3-25 22:24
第一种方式:
insert into 表4
select …… from 表1
union
select …… from 表2
union
…………

select …… from 表n
如果觉得这样仍然有重复数据,可以考虑嵌套一下,加上distinct或者group by
例如:
insert into 表4
select distinct id,字段1,字段2……from (
select …… from 表1
union
select …… from 表2
union
…………

select …… from 表n) a


-------------------------------这里是分割线-------------------------------

第二种方式:
步骤1:插入不重复的基准数据。
insert into 表4(sid)
select id from 表1
union
select id from 表2
union
……
select id from 表n

步骤2:更新必要的字段
update 表4 set 表4.字段1=表1.字段1
from 表1 where 表4.sid=表1.id

update 表4 set 表4.字段2=表1.字段2
from 表1 where 表4.sid=表1.id

……
update 表4 set 表4.字段n=表1.字段n
from 表1 where 表4.sid=表1.id

直至把表4需要更新的字段更新完毕

步骤3:对表2,表3……表n重复步骤2,直至把所有表的字段更新完毕。


作者: 天涯沦落20131    时间: 2020-3-26 12:28
roych 发表于 2020-3-25 22:24
第一种方式:
insert into 表4
select …… from 表1

roych:谢谢你的回复,一如既往的强大;我想通过SQL作业完做到时时更新,完本打算插入数据不重复,又是多表更新至一张表单里,用merge into
                          using(select.....),
                  WHEN MATCHED THEN   
            update  
          set.....
          when not matched then
             insert   ,结果是主键不能重复报错,
采用 inser into,需要设定条件不让它重复更新
作者: roych    时间: 2020-3-30 16:19
把存储过程写好,定期执行就好了。事实上,你应该评估实际业务情况是否需要实时,还是说可以T+1。
一直挂着作业,每过一分钟执行一次可不是什么好事。
最后一条,如果你的数据源太多的话,不妨考虑下重新修改下表结构。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3