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

oiph 2011-12-22 09:48:34
当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 李四 西山






...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oiph 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fredrickhu 的回复:]

这个应该就是一个四表连查。
[/Quote]
谢谢小F,我只知道小步快跑,不懂得一气哈成。求指点。
--小F-- 2011-12-22
  • 打赏
  • 举报
回复
这个应该就是一个四表连查。
勿勿 2011-12-22
  • 打赏
  • 举报
回复
听的有点迷糊
oiph 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 qianjin036a 的回复:]

因为三种情况的条件不同,肯定要用类似 case when 之类的语句,估计效率不会比单个替换高.
[/Quote]
即使效率不比单个替换高,还是想知道答案。因为一步做完,减少了操作次数。谢谢晴天!
oiph 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qianjin036a 的回复:]

看楼主语句,怎么是6个表!
[/Quote]
不是6个表,就是4个,因为我分三步走,建立了两个视图。
-晴天 2011-12-22
  • 打赏
  • 举报
回复
看楼主语句,怎么是6个表!
-晴天 2011-12-22
  • 打赏
  • 举报
回复
因为三种情况的条件不同,肯定要用类似 case when 之类的语句,估计效率不会比单个替换高.

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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