我有以下架构(简化):
users (id, pwd)
users_data (id, user_id, name)
users_parent (parent_user_id, children_user_id)
如何列出给定父ID的子名?
我在Google上看到一些涉及WITH
和UNION ALL
的查询,但这句话对我来说有点新鲜。
答案 0 :(得分:2)
假设层次结构只是父级的一个级别和子级的一个级别,我们可以尝试:
SELECT ud.name
FROM users_parent up
INNER JOIN users_data ud
ON up.children_user_id = ud.user_id
WHERE
up.parent_user_id = <some value>;
修改:基于this SO question我设法将一个应该适用于您的架构的分层查询拼凑在一起:
SELECT children_user_id, ud.name, parent_user_id
FROM
((SELECT * FROM users_parent
ORDER BY parent_user_id, children_user_id) parents_sorted,
(SELECT @pv := '1') initialisation)
LEFT JOIN users_data ud
ON parents_sorted.children_user_id = ud.user_id
WHERE
FIND_IN_SET(parent_user_id, @pv) > 0 AND
@pv := CONCAT(@pv, ',', children_user_id);
要使用abovr查询,只需将其复制到Workbench(或与MySQL一起使用的任何工具),然后将所需的parent_user_id
分配给会话变量@pv
。输出将包含来自此父级的所有子级及其名称。