日期:2014-05-17  浏览次数:20341 次

求高手帮忙解决 数据表字段和其他表的LIKE 用法
现在碰到了一个问题,SQL2005 
CREATE TABLE tb1
    ( 
      ID int,
      deptshow varchar(500)
    )

CREATE TABLE tb2
    (
      userid int,
      deptname varchar(20)
    )

INSERT INTO tb1 
select 1,'集团后勤科'
INSERT INTO tb1 
select 2,'集团办公室,集团财务部,集团法律事务部,集团购物管理科,集团基建科'
INSERT INTO tb1 
select 3,'集团办公室,集团法律事务部,集团后勤科'

INSERT INTO tb2
select 1,'集团后勤科'
INSERT INTO tb2
select 1,'集团财务部'
INSERT INTO tb2
select 2,'集团后勤科'
INSERT INTO tb2
select 2,'集团法律事务部'



现在想通过tb2.userid 的deptname 去查询在 tb1.deptshow 包含的内容。如何实现?

要的结果如下:当userid = 1 时   显示tb1  1,3 行
           当 userid = 2 时   显示tb1  2,3 行




------解决方案--------------------
用charindex函数。
------解决方案--------------------
SELECT A.*
FROM TB1 A,TB2 B
WHERE B.USERID = 1
AND ',' + A.deptshow + ',' LIKE '%,' + B.deptname  + ',%'

------解决方案--------------------
 select distinct a.* from tb1 as a inner join tb2 as b on charindex(b.deptname,a.deptshow)>0 where b.userid=2

你的测试数据有问题吧? 
------解决方案--------------------
userid=1 时 也显示123了 集团财务也是符合要求的 
------解决方案--------------------
SELECT distinct ID,deptshow from
(SELECT ID,deptshow,flag=CAST('<value>'+REPLACE(deptshow,',','</value><value>')+'</value>' AS XML) FROM tb1) a
CROSS APPLY
    (select T.C.value('.','VARCHAR(200)') AS deptname from a.flag.nodes('/value') T(C))b
INNER JOIN tb2 c ON c.deptname=b.deptname WHERE c.userid=2