注册 登录
编程论坛 SQL Server论坛

请高手帮助解决一个SQL查询

temptemptemptem 发布于 2008-08-05 22:11, 1888 次点击
有两个表,表1,表2
表1                     表2
姓名   身份证号    地址                      电话     业务
张三  123456  北京123          12345678  0001  张三  500 56556
李四  566789  上海155          56545644  125  王五  5151 655615651
王五  515151  山东55151         55551515  李四 55151516 61556151
……                    ……
表2中“业务”列中数据不规则,但都包含了表1中的一个“姓名”列中的一个姓名,并且姓名是唯一的,怎样通过SQL语句得到以下结果:
 
姓名   身份证号    地址              电话     
张三  123456  北京123      12345678  
李四  566789  上海155      55551515 
王五  515151  山东55151     56545644
……
10 回复
#2
leros2008-08-05 22:46
seclet a.姓名,a.身份证号,a.地址,b.电话 from 表1 a left join 表2 b on a.姓名 like '%b.业务%'

[[it] 本帖最后由 leros 于 2008-8-5 22:52 编辑 [/it]]
#3
temptemptemptem2008-08-06 22:23
谢谢leros,这样是不行的,我试过了。
当b.业务在单引号中时,仅代表了字符“b.业务”,并不是“表2”的“业务”列。
不知道有没有其它办法,并不一定要用一句SQL语句,多几句也行,关键是要解决问题。先行谢过了。
#4
bb38522008-08-07 09:38
代码写在里面了
http://hi.baidu.com/bb3852/blog/item/136ff4014ae785087aec2c01.html
#5
seiya0278482008-08-07 11:15
楼上的方法很简单。用游标也可以做,但是太复杂
#6
temptemptemptem2008-08-07 14:36
谢谢bb3852,帮我解决了一个难题,同时也学到了一个新函数。
我的SQL语言是通过“SQL21日自学通”学习的,平常也够用了,现在才发现要学的东西还有很多,特别是数据库的扩展功能部分,每个数据库都有其特别之处。今天专门看了SQL server2000函数部分,还有很多函数都没有看过,真是惭愧。
#7
bb38522008-08-08 09:06
大家一起学
#8
qazzwj2008-08-16 16:23
declare  @t table([name] varchar(50),[Identity] varchar(100),Address varchar(1000))
declare  @e table ([Phone] varchar(50),Business varchar(1000))

insert into @t
select '张三','123456','北京123'
union all
select '李四','566789','上海155'
union all
select '王五','545445','山东55763'


insert into @e
select '123478','001 张三 500 879'
union all
select '5345231','545 王五 456 212'



select a.*,b.* from @t a join @e b on b.Business like '%'+a.name+'%'
#9
qazzwj2008-08-16 16:30
另一个解决方案
declare  @t table([name] varchar(50),[Identity] varchar(100),Address varchar(1000))
declare  @e table ([Phone] varchar(50),Business varchar(1000))

insert into @t
select '张三','123456','北京123'
union all
select '李四','566789','上海155'
union all
select '王五','545445','山东55763'


insert into @e
select '123478','001 张三 500 879'
union all
select '5345231','545 王五 456 212'

select a.*,b.* from @t a join @e b on b.Business like (select '%',name 'text()','%' from @t where name=a.name for XML path(''))

注意:在组织like后面的字符串时,我使用了for xml语法。尽管可以使用'%'+a.name+'%'来组织,但从SQL Server 2005 Book online上的说法,微软不保证'%'+a.name+'%'正确性。
#10
zhouyulv2008-08-19 10:32
都是高手..
#11
dxformat2008-08-27 17:25
比较简单的跨表查询
1