table_A
id   parent_id
1 0
2 0
3 1
4 1
5 1
6 1
7 2table_B
id cloumn_A
1 3,4
2 4,5
3 1其中cloumn_A中存储的内容为table_A的id的值的组合。问题:
现在我可以得到一个table_A的id的一个值,比如1,想利用这个1查出table_B中的第1,2条。
不知道意思有没有说清楚,如不清楚,我可以在线解答。
要用一句sql语句实现。

解决方案 »

  1.   

    你这怎么能用一条SQL查出来,存数据有问题,你这样存好了
    table_B
    id cloumn_A
    1 3
    1        4
    2 4
    2        5
    3 1
    你那样没有办法查出来的,除非你先查出来处理一下
      

  2.   

    建议你去http://www.hinale.com
    用SQL,oracle等关键字搜索,运气好可以得到及时的答案
      

  3.   

    看不懂....table_a.parent_id 什麼用?
      

  4.   

    to yys213() 数据是已经存好的,我只是要在这个基础上实现上面的查询
      

  5.   

    create table table_A(ID INT,parent_id INT)
    insert into table_A select 1,0
    insert into table_A select 2,0
    insert into table_A select 3,1
    insert into table_A select 4,1
    insert into table_A select 5,1
    insert into table_A select 6,1
    insert into table_A select 7,2
    go--创建用户定义函数
    create function f_getChild(@ID VARCHAR(10))
    returns @t table(ID VARCHAR(10),parent_id VARCHAR(10),Level INT)
    as
    begin
        declare @i int,@ret varchar(8000)
        set @i = 1
        insert into @t select ID,parent_id,@i from table_A where parent_id = @ID
        
        while @@rowcount<>0
        begin
            set @i = @i + 1
            
            insert into @t 
            select 
                a.ID,a.parent_id,@i 
            from 
                table_A a,@t b 
            where 
                a.parent_id=b.ID and b.Level = @i-1
        end
        return
    end
    go--执行查询
    select * from dbo.f_getChild(1) a,table_B b where charindex(','+Rtrim(a.id)+',',','+b.cloumn_A+',')>0
    go
      

  6.   


    --测试数据
    DECLARE @tA TABLE(id int ,p_id INT)
    INSERT @tA
    SELECT 1 ,0
    UNION ALL SELECT 2 ,0
    UNION ALL SELECT 3 ,1
    UNION ALL SELECT 4 ,1
    UNION ALL SELECT 5 ,1
    UNION ALL SELECT 6 ,1
    UNION ALL SELECT 7 ,2DECLARE @tB TABLE(id INT,col_A CHAR(10))
    INSERT @tB
    SELECT 1 ,'3,4'
    UNION ALL SELECT 2 ,'4,5'
    UNION ALL SELECT 3 ,'1'--生成查询结果
    SELECT b.id,b.col_A FROM @tB b 
    INNER JOIN 
    (SELECT ','+RTRIM(id)+',' AS Aid FROM @tA WHERE p_id=1) a
    ON CHARINDEX(a.Aid,','+col_A+',')>0/*-----------
    1 3,4       
    2 4,5       
    ------------*/
      

  7.   

    create table table_A(ID INT,parent_id INT)
    insert into table_A select 1,0
    insert into table_A select 2,0
    insert into table_A select 3,1
    insert into table_A select 4,1
    insert into table_A select 5,1
    insert into table_A select 6,1
    insert into table_A select 7,2
    go
    create table table_B(id int,cloumn_A varchar(20))
    insert table_B select 1, '3,4'
    insert table_B select 2, '4,5'
    insert table_B select 3, '1'
    go
    --创建用户定义函数
    create function f_getChild(@ID VARCHAR(10))
    returns @t table(ID VARCHAR(10),parent_id VARCHAR(10),Level INT)
    as
    begin
        declare @i int,@ret varchar(8000)
        set @i = 1
        insert into @t select ID,parent_id,@i from table_A where parent_id = @ID
        
        while @@rowcount<>0
        begin
            set @i = @i + 1
            
            insert into @t 
            select 
                a.ID,a.parent_id,@i 
            from 
                table_A a,@t b 
            where 
                a.parent_id=b.ID and b.Level = @i-1
        end
        return
    end
    go--执行查询
    select distinct b.* from dbo.f_getChild(1) a,table_B b where charindex(','+Rtrim(a.id)+',',','+b.cloumn_A+',')>0
    go/*
    ID     cloumn_A
    1 3,4
    2 4,5*/
      

  8.   

    先查出来,用过程语句处理一下,SQL Server中是可以的
      

  9.   

    SELECT b.id,b.col_A FROM @tB b 
    INNER JOIN 
    (SELECT ','+RTRIM(id)+',' AS Aid FROM @tA WHERE p_id=1) a
    ON CHARINDEX(a.Aid,','+col_A+',')>0这里 WHERE p_id=1 
    我的 p_id就是你的 parent_id字段
    将 1 改成其它你要查询的数据即可.
      

  10.   

    to fcuandy(电脑杂工) 结果重复了,
    1 3,4
    1 3,4
    2 4,5
    2 4,5
      

  11.   

    to itblog(BegCSharp) 
    结果重复了,
    1 3,4
    1 3,4
    2 4,5
    2 4,5
      

  12.   

    fcuandy(电脑杂工),總是在偷懶,如果他要考慮多層,怎麼辦?還是要寫函數。 :)
      

  13.   

    select distinct b.* from dbo.f_getChild(1) a,table_B b where charindex(','+Rtrim(a.id)+',',','+b.cloumn_A+',')>0
      

  14.   

    to paoluo(一天到晚游泳的鱼) 
    那您的意思是应该按照itblog(BegCSharp)这样的?
      

  15.   

    没想到过你表中这么多重复数据.用个 dsitinct 吧SELECT distinct b.id,b.col_A FROM @tB b 
    INNER JOIN 
    (SELECT ','+RTRIM(id)+',' AS Aid FROM @tA WHERE p_id=1) a
    ON CHARINDEX(a.Aid,','+col_A+',')>0呵呵. 我就是喜欢偷懒
      

  16.   

    to fcuandy(电脑杂工) 没想到过你表中这么多重复数据????我表中没重复数据的,只是你的语句的查询结果就是重复的
      

  17.   

    id为3,4,5,6之类的记录是id为1的记录的子类,如果它们还可能是别人的parent_id,那么就要写循环(或者用function)了.如果你的数据只存在父子关系,没有多级别(爷-父-子-孙-曾孙...)可以用我写的.
      

  18.   

    我自己查出来不重复.. 
    没有细看数据,可能是由于数据不一样在 JOIN的过程中产生出来的.
      

  19.   

    to fcuandy(电脑杂工) 目前只存在父子关系,不过我还要再看看具体情况