数据库查询问题 请前辈指教 多谢。

zjybushiren88888 2013-05-02 05:50:04
现有数据库查询需求 不变动表结构的情况下 请教各位了

数据库结构简化下如下:

表P_Class(分类表)
id name fatherId(上级id)
第一级分类fatherId=0 数据有10条
每一级下面有若干级数据不等


表P_Product(数据表)
id name classId(这里是引用表P_Class的Id 也就是引用的最后一级的分类id) sort(排序)

需求是:
查询出所有大类最后一级的sort在1-5的所有数据


请各位前辈不吝赐教 多谢多谢。*_*
...全文
230 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
shugeer 2013-05-03
  • 打赏
  • 举报
回复
上面写错了 select a.id,b.name,b.classId,b.sort from P_Class a left join P_Product b on a.id=b.classid where a.fatherld=0 and b.sort in (1,2,3,4,5)
shugeer 2013-05-03
  • 打赏
  • 举报
回复

select a,id,a,name,a,classId,a,sort from P_Class a left join P_Product b on a.id=b.classid where a.fatherld=0 and b.sort in (1,2,3,4,5)  
seusoftware 2013-05-03
  • 打赏
  • 举报
回复
楼主头像不错的样子
最爱午夜 2013-05-03
  • 打赏
  • 举报
回复
cte递归指定递归的层级数就可以做到
黄_瓜 2013-05-03
  • 打赏
  • 举报
回复
--> 测试数据:#P_Class IF OBJECT_ID('TEMPDB.DBO.#P_Class') IS NOT NULL DROP TABLE #P_Class GO CREATE TABLE #P_Class([id] INT,[name] VARCHAR(4),[fatherId] INT) INSERT #P_Class SELECT 1,'A',0 UNION ALL SELECT 2,'B',0 UNION ALL SELECT 3,'A1',1 UNION ALL SELECT 4,'A1_1',3 UNION ALL SELECT 5,'B1',2 UNION ALL SELECT 6,'B1_1',5 --> 测试数据:#P_Product IF OBJECT_ID('TEMPDB.DBO.#P_Product') IS NOT NULL DROP TABLE #P_Product GO CREATE TABLE #P_Product([id] INT,[name] VARCHAR(2),[classId] INT,[sort] INT) INSERT #P_Product SELECT 1,'n1',4,1 UNION ALL SELECT 2,'n2',4,2 UNION ALL SELECT 3,'n3',4,3 UNION ALL SELECT 4,'n4',4,4 UNION ALL SELECT 5,'n5',4,5 UNION ALL SELECT 6,'n6',4,6 UNION ALL SELECT 7,'n7',4,7 UNION ALL SELECT 8,'p1',6,1 UNION ALL SELECT 9,'p2',6,2 UNION ALL SELECT 10,'p3',6,3 UNION ALL SELECT 11,'p4',6,4 UNION ALL SELECT 12,'p5',6,5 UNION ALL SELECT 13,'p6',6,6 --------------开始查询-------------------------- ;WITH cte AS ( SELECT *,[name] AS [father_name],[level]=1 FROM #P_Class WHERE [fatherId]=0 UNION ALL SELECT a.*,t.[father_name] AS [father_name],[level]=[level]+1 FROM #P_Class AS a,cte AS t WHERE a.[fatherId]=t.[id] ) SELECT p.* FROM cte AS c JOIN #P_Product AS p ON c.[id]=p.[classId] WHERE p.[sort]<=5 AND NOT EXISTS(SELECT 1 FROM cte WHERE [father_name]=c.[father_name] AND [level]>c.[level]) ----------------结果---------------------------- /* id name classId sort 1 n1 4 1 2 n2 4 2 3 n3 4 3 4 n4 4 4 5 n5 4 5 8 p1 6 1 9 p2 6 2 10 p3 6 3 11 p4 6 4 12 p5 6 5 */
zjybushiren88888 2013-05-03
  • 打赏
  • 举报
回复
引用 17 楼 sz_haitao 的回复:
分组求前n名,普通的top无法做到了 group也只能分组求第1名 只能使用sql2005开始支持的: rownumber()
能给点DEMO么。
haitao 2013-05-03
  • 打赏
  • 举报
回复
分组求前n名,普通的top无法做到了 group也只能分组求第1名 只能使用sql2005开始支持的: rownumber()
zjybushiren88888 2013-05-03
  • 打赏
  • 举报
回复
没人么
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 14 楼 daiyueqiang 的回复:
[quote=引用 13 楼 zjybushiren88888 的回复:] [quote=引用 10 楼 DVD_01 的回复:] select id,name,classId,sort from P_Product a where a.sort <=5
返回结果按照第一级大类排个序的 我这随便写的数据是给你依次排列的。。。[/quote] 呵呵 说得在理[/quote] 貌似有点复杂哦 等大牛们不吝赐教。。
daiyueqiang2045 2013-05-02
  • 打赏
  • 举报
回复
引用 13 楼 zjybushiren88888 的回复:
[quote=引用 10 楼 DVD_01 的回复:] select id,name,classId,sort from P_Product a where a.sort <=5
返回结果按照第一级大类排个序的 我这随便写的数据是给你依次排列的。。。[/quote] 呵呵 说得在理
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 10 楼 DVD_01 的回复:
select id,name,classId,sort from P_Product a where a.sort <=5
返回结果按照第一级大类排个序的 我这随便写的数据是给你依次排列的。。。
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 10 楼 DVD_01 的回复:
select id,name,classId,sort from P_Product a where a.sort <=5
你这个太敷衍了吧。。。
daiyueqiang2045 2013-05-02
  • 打赏
  • 举报
回复
引用 10 楼 DVD_01 的回复:
select id,name,classId,sort from P_Product a where a.sort <=5
没有这么简单
Andy-W 2013-05-02
  • 打赏
  • 举报
回复
select id,name,classId,sort from P_Product a where a.sort <=5
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 7 楼 tangguangqiang 的回复:
就是像2楼回复的求最后一级吗?
可以理解哦?
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
搞点数据 可能会看的更明白一点 需求是: 查询出所有P_Class表中fatherId=0的最后一级分类sort在(1,2,3,4,5)的数据(P_Product) 表P_Class(分类表) id name fatherId 1 A 0 2 B 0 3 A1 1 4 A1_1 3 5 B1 2 6 B1_1 5 表P_Product(数据表) id name classId sort 1 n1 4 1 2 n2 4 2 3 n3 4 3 4 n4 4 4 5 n5 4 5 6 n6 4 6 7 n7 4 7 8 p1 6 1 9 p2 6 2 10 p3 6 3 11 p4 6 4 12 p5 6 5 13 p6 6 6 处理返回结果: 1 n1 4 1 2 n2 4 2 3 n3 4 3 4 n4 4 4 5 n5 4 5 8 p1 6 1 9 p2 6 2 10 p3 6 3 11 p4 6 4 12 p5 6 5
习惯性蹭分 2013-05-02
  • 打赏
  • 举报
回复
就是像2楼回复的求最后一级吗?
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
引用 5 楼 tangguangqiang 的回复:
没看明白.....
这个需求描述已经满清楚了吧。
习惯性蹭分 2013-05-02
  • 打赏
  • 举报
回复
没看明白.....
zjybushiren88888 2013-05-02
  • 打赏
  • 举报
回复
有高手回答下么 不吝赐教。
加载更多回复(3)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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