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语句实现。
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语句实现。
table_B
id cloumn_A
1 3
1 4
2 4
2 5
3 1
你那样没有办法查出来的,除非你先查出来处理一下
用SQL,oracle等关键字搜索,运气好可以得到及时的答案
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
--测试数据
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
------------*/
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*/
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 改成其它你要查询的数据即可.
1 3,4
1 3,4
2 4,5
2 4,5
结果重复了,
1 3,4
1 3,4
2 4,5
2 4,5
那您的意思是应该按照itblog(BegCSharp)这样的?
INNER JOIN
(SELECT ','+RTRIM(id)+',' AS Aid FROM @tA WHERE p_id=1) a
ON CHARINDEX(a.Aid,','+col_A+',')>0呵呵. 我就是喜欢偷懒
没有细看数据,可能是由于数据不一样在 JOIN的过程中产生出来的.