-
SQL,根据分组ID,查询该分组下的所有分组以及分组下的分组40
描述:一张分组表 为简化问题,只列出核心字段:
id:分组ID,
name:分组名称;
parentID : 父分组的ID
问题是:能不能通过SQL,对于指定的分组,查出下面所有的分组(包括分组下的分组)。
希望的效果:比如分组1下面有分组2和分组3,分组2下面还有分组4,现在给定分组1的ID,希望查询出来的结果包括分组2,分组3,以及分组4。
问题补充:感谢大家的回复。我再补充几点:
1、希望方案通用化,不依赖指定类型的数据库;
2、感谢jinnianshilongnian的回复,但是表结构已经定了,无法切换到您的方案。
3、删除分组的问题,大家可以暂不考虑,在删除分组前,业务上会有校验,必须先将分组下的内容清空。2013年4月10日 17:23
5个答案 按时间排序 按投票排序
-
采纳的答案
这个问题是个历史悠久的问题。
从结论说,想一句SQL文是搞不定。特别是楼主还不想依赖DB。
(大多数是DB里写函数的。)
如果需求只是列出根节点的所有子孙节点的话,简易的解决方案是表上再加个RootID的字段。
如果DB根本不让动,或者需求是从任意节点起的话,就只能程序里再循环了。
1. 服务器端程序里面循环。
2. 客户端JS异步请求。
这两种。
为了效率,可以一次取两层。类似... where id = {param} or parentID = {param}
2013年4月11日 13:55
-
想通用就必须修改表结构,如2楼所建议的那样(一次改动,到处通用),并不是所有的数据库都支持树状查询,当然通过存储过程也可以实现树状查询,如mysql可以这么做:http://zyn010101.iteye.com/blog/1161361,但效率会随着数据量的增长迅速下降。
2013年4月11日 11:06
-
无限极分类。
id name parent_id
1 xxx null
2 aaa 1
3 bbbb 1
4 cccc 2
5 dddd 4
大概就是找寻1的时候 2345 都查询来吧。那就是这个。
但是像你说的1删除了? 有外键不能直接删除啊。必须子全删掉啊,2013年4月11日 10:04
-
建议你改下策略 使用如
`id` bigint not null auto_increment,
`parent_id` bigint,
`parent_ids` varchar(200) default '',
parent_ids 存储所有父路径
如
id parent_id parent_ids
1 0 0/
2 1 0/1/
3 1 0/1/
4 3 0/1/3/
如查1下的 可以使用 0/1/%查询 跨数据库
如果oracle 楼上的即可2013年4月10日 18:07
-
Oracle吗?select * from table start with id= 1 connect by prior id = parentID ;
2013年4月10日 17:33
相关推荐
在SQL Server中,分组和排序是数据处理的两个关键操作。它们可以帮助我们对大量数据进行聚合、组织和筛选,以便更好地分析和理解数据。本文将深入探讨如何在SQL Server中实现分组排序并获取每组的特定行数据。 首先...
在SQL Server 2000中,分组统计是一个核心的查询功能,它允许数据库管理员和开发者对数据进行聚合操作,以获取特定字段的汇总信息。分组统计通常涉及GROUP BY语句,配合COUNT(), SUM(), AVG(), MAX() 和 MIN()等聚合...
#### SQL分组计算 SQL中的`GROUP BY`子句用于结合聚合函数(如`SUM()`, `AVG()`, `MAX()`, `MIN()`等),对结果集按照一个或多个列进行分组。这使得我们可以对每一组执行聚合操作,从而获得更有意义的数据视图。 #...
比如,计算每个`STOCK_ID`下按`TYPE_CD`分类的总价值占该`STOCK_ID`所有类型总价值的百分比。这通常涉及到子查询或窗口函数(如`OVER()`)来实现。 假设我们需要计算上文SQL查询结果中每个`STOCK_ID`的总价值占其...
在SQL(结构化查询语言)中,连接查询和分组查询是两个非常重要的概念,用于处理和分析数据库中的数据。本章将详细讲解这两个概念及其应用。 首先,我们来看连接查询。连接查询允许我们将多个表的数据结合在一起,...
在C# 2008中,数据库分组条件查询是数据处理中常见的操作,它允许我们根据一个或多个字段对查询结果进行分类,并可以计算每个组的聚合函数,如求和、平均值等。本篇文章将深入探讨如何在C# 2008中实现这一功能,以及...
本次实验旨在帮助学生通过实践加深对SQL语言的理解,特别是关于分组、排序、聚合函数以及连接查询等关键概念的应用。具体包括: 1. **掌握通配符的用法**:通配符在SQL中用于模糊匹配字符串,如`%`和`_`。 2. **...
在数据库管理中,SQL(Structured Query ...掌握这些SQL分组聚合查询技巧,对于理解数据库原理基础以及在实际工作中进行数据处理至关重要。通过不断的练习和应用,你将能够熟练地运用这些概念来解决复杂的数据库问题。
为了实现上述的目标,我们需要设计一个SQL查询或存储过程来完成数据分组的任务。下面将详细介绍具体的实现步骤。 #### 三、创建测试数据表 首先,我们需要创建一个测试数据表,并填充相应的数据。根据题目中的描述...
在SQL Server中,分组统计查询是数据分析和报表制作中常用的一种技术,它允许我们根据一个或多个字段对数据进行汇总。在这个例子中,我们将探讨如何按照月和小时对访问记录进行分组统计。 首先,我们需要创建一个...
标题:按某字段合并字符串之一(简单合并) 描述:将如下形式的数据按id字段合并value字段。...1、sql2000中只能用自定义的函数解决 create table tb(id int, value varchar(10)) insert into tb values(1,
- `WHERE (id IN (SELECT id FROM a AS a1 GROUP BY id HAVING (COUNT(1) >= 2)))`:这一行是在外部查询中添加一个条件,即只选择那些`id`出现在内部查询结果中的记录。 ### SQL查询重复数据的其他方法 除了上述...
根据给定的关系模式和SQL查询语句,我们可以深入地探讨多表查询、嵌套查询以及分组查询等数据库操作中的关键技术点。 ### 关系模式分析 #### 职员表 (Emp) - **主码**: `eid` (唯一标识每个员工) - **属性**: - `...
在SQL中,递归查询、分组和统计是三个重要的概念,它们分别用于处理层级数据、数据聚合和复杂的数据分析。 1. **递归查询**: 递归查询主要用于处理具有层级关系的数据,例如组织结构、目录树等。在Oracle数据库中...
根据给定的信息,我们可以整理出一系列关于SQL的基本操作与高级查询技术的知识点: ### SQL基础知识 #### 创建数据库 - **语法**: `CREATE DATABASE database-name;` - **示例**: 创建一个名为`example_db`的...
在循环内部,我们根据当前分组的zcxt值从#TB中选择所有记录,并将它们插入到#TB1中。同时,我们也会插入一条计算后的"小计"记录,其中包含了分组内各项的总和。 对于"合计",我们可以在循环之外,使用一次聚合查询...
在本篇文章中,我们将深入探讨SQL的分组数据功能,包括数据分组、创建分组、过滤分组、分组与排序以及SELECT子句的顺序。 10.1 数据分组: 数据分组是通过对数据库中的数据进行分类,以生成聚合统计信息。例如,...
查询id大于2的数据,并完成运算后的结果进行分组和排序 select count(*), (sex * id) new from student where id > 2 group by sex * id order by sex * id; --group by all 所有分组 按照年龄分组,是所有的年龄 ...
这些查询通常涉及多个表的联合、子查询、分组、排序、聚合函数以及更复杂的逻辑操作。以下是一些常见的复杂SQL查询示例,旨在帮助你理解和掌握其核心概念。 1. **联接查询**: - 内连接(INNER JOIN):返回两个表...