现有一table,格式如下 序号  字段1  字段2 
1    A    1,2,3,4 
2    B    2,3 
3    C    2,4 
4    D    1,4 
5    E    1,3,4 
…… 字段2 是字符型 ,是另一张表的ID号 现在我将以字段2的值来查询另一张表的相应记录 请问如何查询PS:我网上查到的说用charindex比较容易实现

解决方案 »

  1.   

    T1:
    A        ID
    a1 1,2,3,4
    a2 2,4
    AA 2,4,5T2:
    ID       VALUES
    1       AFAFASF   
    2       ASFDSADFAS
    3       AFASDF    
    4       ADFAFASDFA
    SELECT * FROM 
    T1 
    LEFT JOIN 
     T2
    on 
    charindex(RTRIM(T2.ID) ,RTRIM(T1.ID)) > 0
    不知是否为楼主想要的。
      

  2.   

    谢谢回答,不过我有个疑问,不需要判断吗?比如where什么的
      

  3.   

    对了,我要查询的是另一张表,就是楼上所说的T2,T1的字段2只是作为查询T2 id的筛选条件
      

  4.   

    ypacyhero 的方法无法实现功能啊
      

  5.   

    你的意思是:要将这个表中字段2的所有ID对应的记录从另外一个表查出。是不是这样。如果是这样我这SQL就是完全可以的。
      

  6.   

    我再说的详细点,t1是用户表,有一个字段保存的是权限(1,2,3),这些数字是登录后显示的treeview的节点值(即t2树表的id),我想通过权限字段查找t2树表的记录,然后填充到treeview中,现在的问题就是这个查找语句了
    t1
    id  字段1  user——grant
    1    A    1,2,3,4 
    2    B    2,3 
    3    C    2,4 
    4    D    1,4 
    5    E    1,3,4 t2
    id  字段1  字段2 
    1    A    a 
    2    B    b
    3    C    c 
    4    D    d
    5    E    e
      

  7.   


      select * from table1 where convert(nvarchar(10),id)+',' in (select 字段2+',' from table)
      

  8.   

    补充下,t1里面要加个where条件   select * from t2  where convert(nvarchar(10),id)+',' in (select grant+',' from table where id=1)
      

  9.   

    楼上的,未找到对象实例,查不到数据啊
    ps:id都是int类型,grant是varchar类型
      

  10.   

    想用一个sql语句就得到结果好像有点困难,楼主可以用存储过程实现试试。create table #table1
    (
    id int,
    字段1 varchar,
    [user] nvarchar(50)
    )insert into #table1(id,字段1,[user])
    values(1,'A','1,2,3,4')
    insert into #table1(id,字段1,[user])
    values(2,'B','2,3')
    insert into #table1(id,字段1,[user])
    values(3,'C','2,4')
    insert into #table1(id,字段1,[user])
    values(4,'D','1,4')
    insert into #table1(id,字段1,[user])
    values(5,'E','1,3,4')create table #table2
    (
    id int,
    字段1 varchar,
    字段2 varchar
    )insert into #table2(id,字段1,字段2)
    values(1,'A','a')
    insert into #table2(id,字段1,字段2)
    values(2,'B','b')
    insert into #table2(id,字段1,字段2)
    values(3,'C','c')
    insert into #table2(id,字段1,字段2)
    values(4,'D','d')
    insert into #table2(id,字段1,字段2)
    values(5,'E','e')
    declare @str nvarchar(50)
    select @str = [user] from #table1 as temptable1
    where id = 1declare @sql nvarchar(4000)
    set @sql = 'select [字段2] from #table2
    where convert(nvarchar,id) in (' + @str +')'exec( @sql)把上面的语句改成存储过程就行了
      

  11.   

    谢谢楼上的详细回答~
    不过我从来没用过存储过程啊,有点看不懂,特别是那个
    where id=1
    是什么意思啊?不能自己选择的吗?
    还有你写的字段2,其实就是表2的id,麻烦你能帮忙改一下吗?
      

  12.   

    向ypacyhero郑重道歉,你的方法是正确的,只是我参数看错了一个,所以结果出不来,请接受这微薄的20分~~
      

  13.   

    Create PROCEDURE  myProcedure
    @table1ID int
    AS
    BEGIN
    SET NOCOUNT ON;
    --根据table1的ID获得table1的[字段2]
    declare @str nvarchar(50)
    select @str = [字段2] from #table1
    where id = @table1ID declare @sql nvarchar(4000)
    set @sql = 'select * from #table2
    where convert(nvarchar,id) in (' + @str +')' exec( @sql) END
    GO
    --调用存储过程
    exec myProcedure 1
    还是ypacyhero的方法好,学习了。我的只能对table1中的记录一条一条的去查询,不能像ypacyhero的一样,一下只全出来。o(∩_∩)o...