SQL2008,四张表mlf、bmsz、bmdh、bmgsd,当后三张表中的指定列=mlf指定列时,只用一组语句就把后三张表的关联列代入

时间:2021-08-08 14:45:45
当mlf.dfhm=bmdh.dh,把bmdh的xm列代入到mlf表中,当mlf.jzh4=bmsz.jzh4 and mlf.thd=bmsz.dz,把bmsz的jzm列代入到mlf表中,当mlf.dh07=bmgsd.dh07,把bmgsd的gsd列代入到mlf表中。(不相等时对应的列为空)
我自己只懂分三步逐一代入的方法,目前我使用下面的语句,想提高效率整合为用一组语句,请求指点。

1 代入xm

create view mlfa as

select dfhm,xm,thd,jzh4,dh07

from mlf left outer join bmdh

on mlf.dfhm=bmdh.dh

2 代入jzm

create view mlfb as

select dfhm,xm,thd,jzh4,jzm,dh07

from mlfa left outer join bmsz

on mlfa.jzh4=bmsz.jzh4 and thd=bmsz.dz

 

3 代入gsd

create view mlfb1 as

select dfhm,xm,thd,jzh4,jzm,dh07,gsd

from mlfb left outer join bmgsd

on mlfb.dh07=bmgsd.dh07


原表mlf如下(列名dfhm,thd,jzh4,dh07)

------dfhm -thd -jzh4 --dh07
13011112222 871 2032 1301111
13600007777 874 1395 1360000
15988881111 010 1485 1598888



原表bmdh如下(列名dh,xm)
---------dh --xm
13011112222  张三
13025112035  张风
15988881111  李四

原表bmsz如下(列名dz,jzh4,jzm)

-dz jzh4 jzm
010 1485 西山
871 2032 东风
563 1182 赵庄

原表bmgsd如下(列名dh07,gsd)
---dh07 gsd
1360000 上海
1300001 学校
1301111 湘江

现在想达成的表的结果
------dfhm -thd -jzh4 --dh07 --xm jzm gsd
13011112222 871 2032 1301111 张三 东风 湘江
13600007777 874 1395 1360000  --   -- 上海
15988881111 010 1485 1598888 李四 西山






7 个解决方案

#1


因为三种情况的条件不同,肯定要用类似 case when 之类的语句,估计效率不会比单个替换高.

#2


看楼主语句,怎么是6个表!

#3


引用 2 楼 qianjin036a 的回复:
看楼主语句,怎么是6个表!

不是6个表,就是4个,因为我分三步走,建立了两个视图。

#4


引用 1 楼 qianjin036a 的回复:
因为三种情况的条件不同,肯定要用类似 case when 之类的语句,估计效率不会比单个替换高.

即使效率不比单个替换高,还是想知道答案。因为一步做完,减少了操作次数。谢谢晴天!

#5


听的有点迷糊

#6


这个应该就是一个四表连查。

#7


引用 6 楼 fredrickhu 的回复:
这个应该就是一个四表连查。

谢谢小F,我只知道小步快跑,不懂得一气哈成。求指点。

#1


因为三种情况的条件不同,肯定要用类似 case when 之类的语句,估计效率不会比单个替换高.

#2


看楼主语句,怎么是6个表!

#3


引用 2 楼 qianjin036a 的回复:
看楼主语句,怎么是6个表!

不是6个表,就是4个,因为我分三步走,建立了两个视图。

#4


引用 1 楼 qianjin036a 的回复:
因为三种情况的条件不同,肯定要用类似 case when 之类的语句,估计效率不会比单个替换高.

即使效率不比单个替换高,还是想知道答案。因为一步做完,减少了操作次数。谢谢晴天!

#5


听的有点迷糊

#6


这个应该就是一个四表连查。

#7


引用 6 楼 fredrickhu 的回复:
这个应该就是一个四表连查。

谢谢小F,我只知道小步快跑,不懂得一气哈成。求指点。