这是个难题,高手高手高高手请进。

_pb_ 2005-06-20 04:31:23
my_pk super_pk name
1 0 中国
2 1 河北
3 1 山东
4 1 江苏
5 2 承德
6 2 唐山
7 3 德州
8 3 青岛
9 8 青岛崂山区
10 5 承德双兰区


根据索引取出下面包含的所有记录的my_PK号

比如查询条件
my_pk=3 应该取得结果是 3,7,8,9

比如查询条件
my_pk=2 应该取得结果是 2,5,6,10
...全文
136 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
_pb_ 2005-06-21
  • 打赏
  • 举报
回复
ok,ok 结贴。
paoluo 2005-06-20
  • 打赏
  • 举报
回复
--建立测试环境
Create Table TEST
(my_pk Int,
super_pk Int,
name Nvarchar(100))
--插入数据
Insert TEST Values(1, 0, N'中国')
Insert TEST Values(2, 1, N'河北')
Insert TEST Values(3, 1, N'山东')
Insert TEST Values(4, 1, N'江苏')
Insert TEST Values(5, 2, N'承德')
Insert TEST Values(6, 2, N'唐山')
Insert TEST Values(7, 3, N'德州')
Insert TEST Values(8, 3, N'青岛')
Insert TEST Values(9, 8, N'青岛崂山区')
Insert TEST Values(10, 5, N'承德双兰区')
GO
--建立函数
Create Function Getmy_pk(@my_pk Int)
Returns Varchar(1000)
As
Begin
Declare @S Varchar(1000)
Declare @T Table(my_pk Int,super_pk Int)
Insert Into @T Select my_pk,super_pk From TEST Where my_pk=@my_pk
While @@rowcount>0
Insert Into @T Select A.my_pk,A.super_pk From TEST A
Inner Join @T B On A.super_pk=B.my_pk
Where A.my_pk Not In(Select my_pk from @T)
Set @S=''
Select @S=@S+','+Rtrim(my_pk) from @T Order by my_pk
Return(Stuff(@S,1,1,''))
End
GO
--测试
Select dbo.Getmy_pk(2) As super_pk
Select dbo.Getmy_pk(3) As super_pk
GO
--删除测试环境
Drop Table TEST
Drop Function Getmy_pk
--结果
/*
super_pk
2,5,6,10

super_pk
3,7,8,9
*/
paoluo 2005-06-20
  • 打赏
  • 举报
回复
需要写个函数来完成,一条SQL是不可以的。
加减算法 2005-06-20
  • 打赏
  • 举报
回复
看不懂
wzjcntlqs 2005-06-20
  • 打赏
  • 举报
回复
不太清楚你的意思
select my_pk from table where my_pk=3 or super_pk=3
_pb_ 2005-06-20
  • 打赏
  • 举报
回复
求SQL 语句

my_pk=3 应该取得结果是 3,7,8,9

比如查询条件
my_pk=2 应该取得结果是 2,5,6,10

34,838

社区成员

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

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