这个查询该怎么做

cloudgamer 2010-06-11 11:51:24
例如有如下记录
id1 id2
1 2
1 3
2 4
5 4

我想找1相关的数据
根据id1能得到 2 3
根据2 得到 4
根据4 得到 5
最后得到id为
2 3 4 5
的关联记录
这个怎么查询出来呢
...全文
192 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
small_agile 2010-06-25
  • 打赏
  • 举报
回复
declare @t table (id int,id2 int)
insert @t
select 1,2 union all
select 1,3 union all
select 2,4 union all
select 5,4
select * from @t

declare @var varchar(20)
select @var=isnull(@var+',','')+ cast(id2 as varchar(20)) from @t

select c= @var
cloudgamer 2010-06-25
  • 打赏
  • 举报
回复
ls的有问题呢

INSERT INTO #for_csdn VALUES(1,2)
INSERT INTO #for_csdn VALUES(1,3)
INSERT INTO #for_csdn VALUES(2,4)
INSERT INTO #for_csdn VALUES(5,4)
INSERT INTO #for_csdn VALUES(6,7)
INSERT INTO #for_csdn VALUES(7,8)
INSERT INTO #for_csdn VALUES(9,10)

这样的话应该是
12345
678
9 10
这样分才对
但ls都混在一起了
ShenLiang2025 2010-06-13
  • 打赏
  • 举报
回复



--1)表和数据

CREATE TABLE #for_csdn
(id1 int,
id2 int)
INSERT INTO #for_csdn VALUES(1,2)
INSERT INTO #for_csdn VALUES(1,3)
INSERT INTO #for_csdn VALUES(2,4)
INSERT INTO #for_csdn VALUES(5,4)

--2)代码段

DECLARE @str varchar(MAX)
SET @str = ''
SELECT @str = ISNULL(@str + ' ','')+CAST(IDEN AS varchar(30))FROM
(
SELECT IDEN = id2 FROM #for_csdn B
INNER JOIN
(
SELECT id1 FROM #for_csdn
GROUP BY id1
HAVING COUNT(1) > 1)A
ON A.id1 = B.id1

UNION

SELECT IDEN = id1 FROM #for_csdn C
INNER JOIN (
SELECT id2 FROM #for_csdn
GROUP BY id2
HAVING COUNT(1) > 1)D
ON C.id2 = D.id2

UNION

SELECT IDEN = id2 FROM #for_csdn
GROUP BY id2
HAVING COUNT(1) > 1)F

SELECT iden = @str

--3)结果

iden
--------------------------------------
2 3 4 5

(1 row(s) affected)


cloudgamer 2010-06-13
  • 打赏
  • 举报
回复
id1 id2是另外一个表的id
这个表是记录他们的关联关系
ask_chang 2010-06-13
  • 打赏
  • 举报
回复
写明白点,一个表关联自己吗?
cloudgamer 2010-06-13
  • 打赏
  • 举报
回复
cloudgamer 2010-06-12
  • 打赏
  • 举报
回复
ChinaJiaBing 2010-06-11
  • 打赏
  • 举报
回复


--try


if object_id('tb') is not null
drop table tb
if object_id('pro_c')is not null
drop procedure pro_c
go
create table tb (id1 int,id2 int)
insert into tb select 1,2
union all select 1,3
union all select 2,4
union all select 5,4
go
create procedure pro_c
@id nvarchar(10)
as
begin
declare @str nvarchar(10)
set @str=''
select @str=@str+' '+ ltrim(id2) from tb where charindex(ltrim(id1),@id)>0
select @str
end
go
exec pro_c 125


/*


2 3 4 4

(1 行受影响


*/

ling201003 2010-06-11
  • 打赏
  • 举报
回复
什么意思呢。。。关注
jaydom 2010-06-11
  • 打赏
  • 举报
回复
没怎么看明白,感觉不难,建议楼主重新描述一下,下午有事只能帮顶啦
lxy_swufe 2010-06-11
  • 打赏
  • 举报
回复
关注!!!!
帮顶了..
cloudgamer 2010-06-11
  • 打赏
  • 举报
回复
其实就是找出所有有关联的数据
cloudgamer 2010-06-11
  • 打赏
  • 举报
回复
2 3 4 4

不是我想要的结果啊

34,838

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧