分类是在一般系统最常见的信息组织方式,有单级的分类,二级的分类,还有无限制级的分类。
当然我们给博客贴上分类的时候只要join下就可以找到分类的名称。
但是我们在做导航或者选择分类的时候往往涉及到分类的级联查询。下面就是说如何用sql查询这样的分类信息。
1 2 3 4 5 6 7 | -- 建立分类表 CREATE TABLE t_category ( ID INT IDENTITY(1,1) PRIMARY KEY , Name VARCHAR (40) NOT NULL , ParentID INT DEFAULT (-1) ) |
-- 插入一些测试数据 INSERT INTO t_category( name ) VALUES ( '计算机类' ) INSERT INTO t_category( name ) VALUES ( '吃的类' ) INSERT INTO t_category( name , parentid) VALUES ( 'linux' , 1) INSERT INTO t_category( name , parentid) VALUES ( 'python' , 1) INSERT INTO t_category( name , parentid) VALUES ( 'oracle' , 1) INSERT INTO t_category( name , parentid) VALUES ( '水果' , 2) INSERT INTO t_category( name , parentid) VALUES ( '主食' , 2) INSERT INTO t_category( name , parentid) VALUES ( '米饭' , 7) INSERT INTO t_category( name , parentid) VALUES ( '面食' , 7) INSERT INTO t_category( name , parentid) VALUES ( 'django' , 4) INSERT INTO t_category( name , parentid) VALUES ( 'tornado' , 4) |
-- 问题一:如何检索一个分类的路线 即:父->子->子->子 获得这样一个路径 -- 查询django分类的路径 结果应该为计算机类->python->django WITH ctetable(id, name ,pid) as ( SELECT ID, name , parentid FROM t_category WHERE ID = 10 UNION ALL SELECT p2.id, p2. name , parentid FROM ctetable JOIN t_category p2 ON p2.id =ctetable.pid ) SELECT * FROM ctetable ORDER BY ID |
-- 输出结果 1, '计算机类' , -1 4, 'python' , 1 10, 'django' , 4 |
主要是应用了sql2005的common table expression特性。为我们提供了方便的查询方式。在cte表中可以自应用
参考地址:http://msdn.microsoft.com/en-us/library/ms175972(v=sql.90).aspx
大龄程序猿,分享互联网开发相关知识!前端、后端,架构等内容,欢迎关注公众号 chengxuyuangangzi
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述