+ -
当前位置:首页 → 问答吧 → 一个困扰了我好久的sql问题

一个困扰了我好久的sql问题

时间:2011-12-27

来源:互联网

表1:
xm ssbm ssbm0 ssbm1
小张 2  
小王 4 6
小李 3 8


表2:

mc dx
A 2|3|4|5|6|
B 2|5|7|8|9|
C 4|6|8|
D 3|7|1|
E 2|5|6


用一条sql得到结果:
xm mc
小张 A
小张 B
小张 E
小王 A
小王 C
小王 E
小李 A
小李 D
小李 B
小李 C

作者: comrade_hj   发布时间: 2011-12-27


select a.xm,b.mc
from a
,b
where charindex( isnull(a.ssbm,''),'|' + b.dx +'|')>0 or charindex(isnull(a.ssbm0,''),'|' +b.dx+'|') > 0 or charindex(isnull(a.ssbm1,''),'|' +b.dx+'|') >0

两位数的话要 '| ' + isnull(a.ssbm,'') + '|'

作者: SSXYC   发布时间: 2011-12-28

SQL code
select a.xm,b.mc
from 表1 a inner join 表2 b
on charindex('|'+ltrim(a.ssbm)+'|','|'+b.dx+'|')>0 or charindex('|'+ltrim(a.ssbm0)+'|','|'+b.dx+'|')>0

作者: qianjin036a   发布时间: 2011-12-28

SQL code

create table 表1
(xm varchar(6), ssbm int, ssbm0 int, ssbm1 int)

insert into 表1
select '小张', 2, null, null union all
select '小王', 4, 6, null union all
select '小李', 3, 8, null

create table 表2(mc char(1), dx varchar(20))

insert into 表2
select 'A', '2|3|4|5|6|' union all
select 'B', '2|5|7|8|9|' union all
select 'C', '4|6|8|' union all
select 'D', '3|7|1|' union all
select 'E', '2|5|6'


select a.xm,b.mc
from 表1 a
inner join 表2 b
on 
charindex(cast(a.ssbm as varchar(1)),b.dx,1)>0 or
charindex(cast(a.ssbm0 as varchar(1)),b.dx,1)>0 or
charindex(cast(a.ssbm1 as varchar(1)),b.dx,1)>0

xm     mc
------ ----
小张     A
小张     B
小张     E
小王     A
小王     C
小王     E
小李     A
小李     B
小李     C
小李     D

(10 row(s) affected)

作者: ap0405140   发布时间: 2011-12-28

SQL code
SELECT a.xm,b.mc FROM 表1 AS a ,表2 AS b  WHERE '|'+b.dx+'|' LIKE '%|'+RTRIM(ssbm)+'|%' OR '|'+b.dx+'|' LIKE '%|'+RTRIM(ssbm0)+'|%'

作者: roy_88   发布时间: 2011-12-28