在 MySQL 中,查询树的所有子节点是一项很常见的任务。下面我们来介绍一些方法来实现这个功能。
SELECT * FROM tree_table WHERE path LIKE 'parent_id,%' OR path LIKE '%,parent_id,%' OR path LIKE '%,parent_id'
上面的 SQL 查询语句可以查询一棵树里某个节点 id 的所有子节点。
SELECT * FROM tree_table WHERE path LIKE CONCAT('parent_id,%') OR path LIKE CONCAT('%,', parent_id, ',%') OR path LIKE CONCAT('%,', parent_id)
上面的 SQL 查询语句也可以查询一棵树里某个节点 id 的所有子节点,并且通过 CONCAT 函数来拼接字符串,可以更加灵活地查询。
WITH RECURSIVE cte AS (SELECT id, parent_id, name, path FROM tree_table WHERE id = 1 UNION ALL SELECT tt.id, tt.parent_id, tt.name, tt.path FROM tree_table tt JOIN cte ON tt.parent_id = cte.id)SELECT * FROM cte
上面的 SQL 查询语句使用了 MySQL 的递归查询,可以查询一棵树里某个节点 id 的所有子节点。不过,这种方法需要在 MySQL 版本 8.0 及以上才能使用。
总之,在 MySQL 中查询树的所有子节点,有多种方法可供选择,可以根据实际情况选择最合适的方法。