首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

两表关联取A表部分字段,B表最小数据及其他的字段优化解决办法

2013-09-11 
两表关联取A表部分字段,B表最小数据及其他的字段优化AID姓名工资等级1张30012王40023唐5003B等级_工资_备

两表关联取A表部分字段,B表最小数据及其他的字段优化
A
                  ID               姓名           工资           等级
1张3001
2王4002
3唐5003

B
            等级_               工资_         备字1_         备字2_
1400SM               SDFF
2420SM2             FDDD
5445SMSD           SDF
6460SDD             GSDF

下面SQL如何优化,没经验,20分全送上了,
select   姓名,等级,工资,
新工资=(select     min(工资_)   from       b   where     等级 <等级_),
备字1     =(select   备字1_   from   b     where   工资_=   (
select     min(工资_)   from       a     where     等级 <等级_)       )
备字2     =(...取法同上)
  from     a

[解决办法]
select 姓名,等级,工资,工资,字1,备注2
from a
,b c
where not exists(select 1 from b where 等级_> =等级_ or 工资_> =c.工资_)
[解决办法]
create table A(ID int, 姓名 varchar(10), 工资 int, 等级 int)
insert A select 1, '张 ',300,1
union all select 2, '王 ',400,2
union all select 3, '唐 ',500,3

create table B(等级_ int, 工资_ int, 备字1_ varchar(10), 备字2_ varchar(10))
insert B select 1,400, 'SM ', 'SDFF '
union all select 2,420, 'SM2 ', 'FDDD '
union all select 5,445, 'SMSD ', 'SDF '
union all select 6,460, 'SDD ', 'GSDF '

select 姓名, 工资, 等级,
新工资=(select min(工资_) from B where tmp.等级 <等级_),
备字1=( select 备字1_ from B where 工资_=(select min(工资_) from B where tmp.等级 <等级_) ),
备字2=( select 备字2_ from B where 工资_=(select min(工资_) from B where tmp.等级 <等级_) )
from A as tmp

--result
姓名 工资 等级 新工资 备字1 备字2
---------- ----------- ----------- ----------- ---------- ----------
张 300 1 420 SM2 FDDD
王 400 2 445 SMSD SDF
唐 500 3 445 SMSD SDF

(3 row(s) affected)


我的异常网推荐解决方案:软件开发者薪资,http://www.myexception.cn/other/1391128.html

热点排行