日期:2014-05-18  浏览次数:20508 次

高分求个问题,高手帮帮忙拉
有2张表
一个表(A表)的一个字段包含IP信息     还有个表(B表)是一个IP   对应一个信息
2张表都有一个IP字段       可是A表的IP有可能和B表的IP是同一个IP段   就是说

A表
字段1         字段2
杀人         192.168.0.2
放火         192.168.9.3
抢劫         129.99.99.3

B表
字段1         字段2
店1           192.168.0.88
店2           192.168.9.88
店3           129.99.99.88

我现在需要的结果是这样
字段1         字段2                   字段3
杀人         192.168.0.2           店1
放火         192.168.9.3           店2
抢劫         129.99.99.3           店3

------解决方案--------------------
create table A(字段1 varchar(20),字段2 varchar(20))
create table B(字段1 varchar(20),字段2 varchar(20))

insert A select '杀人 ', '192.168.0.2 '
union all select '放火 ', '192.168.9.3 '
union all select '抢劫 ', '192.168.99.3 '

insert B select '店1 ', '192.168.0.88 '
union all select '店2 ', '192.168.9.88 '
union all select '店3 ', '192.168.99.88 '
union all select '店4 ', '192.168.10.88 '

select A.字段1,A.字段2,字段3=B.字段1 from A left join B
on left(A.字段2,len(A.字段2)-len(right(A.字段2,charindex( '. ',reverse(A.字段2)+ '. ')-1))-1)=
left(B.字段2,len(B.字段2)-len(right(B.字段2,charindex( '. ',reverse(B.字段2)+ '. ')-1))-1)

drop table A,B

字段1 字段2 字段3
-------------------- -------------------- --------------------
杀人 192.168.0.2 店1
放火 192.168.9.3 店2
抢劫 192.168.99.3 店3

(所影响的行数为 3 行)