需求,根据传入的父节点查
下一级和下下级
所有节点,比如:这里传入父节点id为2,要查询2下的所有节点也就是:6,7,9,10节点
查询SQL:
select * from item_type WHERE type_pid=2
or type_pid IN(select type_id from item_type where type_pid=2)
结果截图:
够简单吧!原理一看就懂,就是查询
2下的节点
和(
or
)查询
2下节点的集合作为条件
用
in
再查一次
注意:
这个sql只能
查询三级节点
,也就是说
11
虽然是2的子节点,但是查不出来,即传入1级,查询2级和三级,或传入2级查3级,这个主要是基于业务,我的业务并不需要更多级的查询.我也在网上找了很多代码,但几乎都需要存储过程或自定义SQL函数,比较复杂,所以就自己想了这个办法,如果能帮助到你,那可以给我个关注或点赞,万分感谢,如果帮补了你,那万分抱歉!
这里贴出四级查询的SQL
四级查询:
select * from item_type WHERE type_pid=2
or type_pid IN(select type_id from item_type where type_pid=2)
or type_pid IN (select type_id from item_type where type_pid
in(select type_id from item_type where type_pid=2));
结果截图:
思路:根据or连接词层层套娃
新年了,祝大家新的一年里编程没有bug
根据父节点主键ID 查询所有子节点及其下的所有数据(mysql5.7以上可以使用)
//递归查询所有id存储到cte
WITH RECURSIVE cte ( id ) AS (
SELECT
blade_dept
WHERE
id = 1295608298497667074 UNION ALL
SELECT
d.id id
INNER JOIN blade_dept d ON cte.id = d.parent_id
//再根据ID查询对应的数据
FROM (
SELECT @r AS id,
(SELECT @r := parent_id FROM department WHERE id = @r) AS tmp_parent_id
FROM (SELECT @r := 9) leafNodeId,
department hd) d2
INNER JOIN department d3 ON d2.id = d3.id AND d2.tmp_parent_id is not null
我整理的一些关于【MySQL,SQL】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=QDW3g3MySQL 中的递归查询:根据父节点查询子节点
在数据库设计中,树形结构非常常见,比如组织结构、目录结构等。在 MySQL 中,可以使用递归查询来获取某一父节点下的...
SELECT id,dept_name,parent_id
(SELECT id,parent_id,dept_name FROM sys_dept where parent_id > 0 ORDER BY parent_id, sort) a,
(SELECT @pv :=1) b
WHERE (FIND_IN_SET(parent_id,@pv)>0 And @pv := concat(@pv, ',', id))
执行结果:
<!--根据
id查询子节点-->
<select
id="son
Id" parameterType="
java.lang.String" resultType="com.tl.visual.model.SystemRelate">
SELECT class_
id FROM (
SELECT t1.class_
id,
(SELECT
`t1`.*, IF(FIND_IN_SET(`dept_parent_
id`, @p
ids) > 0, @p
ids := CONCAT(@p
ids, ',', `
id`), 0) AS 'ischild'
(SELECT * FROM `sm_department` t ORDER BY `dept_parent_
id`, `
id`) t1,
(SELECT @p
ids := 2) t2) t3
WHERE
dietary_food_directory child
JOIN org ON org.C_
ID = child.C_PARENT_
ID
) SELECT * FROM org
SELECT rd.*
FROM (SELECT * FROM t_department WHERE parent_id IS NOT NULL and
type=#{platformType} and status=0 ) rd,
(SELECT @pid :=#{id}) pd
WHERE FIND_IN_SET(parent_id, @pid) > 0
AND @pid := concat(@pid, ','...
由于mysql 不支持类似 oracle with ...connect的 递归查询语法
之前一直以为类似的查询要么用存储过程要么只能用程序写递归查询.
现在发现原来一条sql语句也是可以搞定的
先来看数据表的结构如下:
id name parent_id
---------------------------
1 Home 0
2 About 1...
最近工作老是会遇到需要根据
父节点查询底下所有
子节点的业务。心里突然冒出想直接使用
sql语句一步到位
查询出来的想法,故此尝试了一波,没想到效果还不错,记录下来说不定以后可以继续沿用和改进。也希望能给更多需要的人提供一点帮助。
这里主要介绍一下两种
数据库中
sql的
查询实现。分别为
mysql和
sqlserver,两者之间的实现方法还是有些不同的。新手一个,还不能深刻的剖析原理,所以多多谅解...