当前位置: 首页 > 面试题库 >

MySql中的分层数据

范翰海
2023-03-14
问题内容

我有一个与父子关系的表,我需要递归查询的帮助

表结构

roleId,  roleName,      parentId
1        Admin          0
2        Backup Admin   1
3        Office User 1  0
4        User 1         3
5        User 2         3
6        Office User 2  0
7        Off User 1     6

我正在尝试进行递归查询,但是我无法做到这一点,建议我应该如何查询数据

  Admin
  -- Backup Admin
  Office User 1
  -- User 1
  -- User 2
  Office User 2
  -- Off User 1

问题答案:

正如上面所指出的,这并不是真正的递归,但是如果您知道最大需要深入多少步,则可以沿以下方向使用某些方法(也许使用PHP生成查询):

我首先将父ID设置为NULL而不是0,但这是个人喜好。

SELECT * FROM table t1
LEFT JOIN table t2 ON t2.parent_id = t1.role_id
LEFT JOIN table t3 ON t3.parent_id = t2.role_id
WHERE t1.parent_id IS NULL

^^在这种情况下,您需要走多远。

[ 下一点没有严格意义 ]

然后,您可以按照以下方式操作输出:

SELECT
        (CASE 
        WHEN (t1.name IS NULL AND t2.name IS NULL) THEN t3.name
        WHEN (t1.name IS NULL AND t2.name IS NOT NULL) THEN t2.name
        ELSE t1.name END)  AS first,
        (CASE 
        WHEN (t1.name IS NOT NULL AND t2.name IS NOT NULL) THEN t2.name
        WHEN (t2.name IS NULL AND t3.name IS NOT NULL) THEN NULL
        ELSE t3.name END)  AS second,
        (CASE 
        WHEN (t1.name IS NOT NULL) THEN t3.name
        ELSE  NULL END)  AS third
FROM


 类似资料:
  • 问题内容: 我试图找到一个特定领域的所有深度的父母,祖父母等。例如,给定以下结构,如果我提供5,则返回的值应为1、2、3和4。 我该怎么做? 问题答案:

  • 问题内容: 鉴于下表 我要执行以下操作: 如果我搜索Ben,我想找到图像,如果没有图像,我想找到父母的图像,如果不存在,我想转到祖父母的图像…直到点击默认图片。 最有效的方法是什么?我知道SQL并不是真正为分层值设计的,但这是我需要做的。 干杯! 问题答案: MySQL缺少递归查询,而递归查询是标准SQL的一部分。许多其他品牌的数据库都支持此功能,包括PostgreSQL(请参阅http://ww

  • 问题内容: 我有一个表,用于存储目录信息(例如在文件系统中)。每个目录(命名节点)都有一个和一个。我想尽可能有效地检索完整路径。为此,我试图使以下查询正常工作,但是这些查询仅返回预期的第一行(实际上是最里面的目录)。任何人都可以帮助获取完整的结果集,以便也选择给定目录/节点的所有层次结构父级。 我目前正在尝试的查询: 选择: 选择: 样本数据: 所需的输出: 谁能帮忙吗? 问题答案: 您已经错过了

  • 问题内容: 嗨,好几天以来,我一直在MySQL中解决这个问题,但是我无法弄清楚。你们有什么建议吗? 基本上,我有一个类别表,其域如:,(类别名称)和(类别的父代ID)。 示例数据: 有许多级别,可能超过3个级别。我想创建一个根据层次结构将数据分组的sql查询:父级>子级>孙子级>等。 它应该输出树结构,如下所示: 我可以使用一个SQL查询吗?我尝试并起作用的替代方法如下: 此后,我再次遍历数据,然

  • 我在Spark(v2.1.1)中有一个数据集,其中有3列(如下所示)包含分层数据。 我的目标是根据父子层次结构为每一行分配增量编号。从图形上可以说,分层数据是树的集合 根据下表,我已经根据“Global_ID”对行进行了分组。现在,我想以增量顺序生成“值”列,但基于“父”列和“子”列的数据层次结构 表格表示(值是所需的输出): 树形表示(每个节点旁边都显示了所需的值): 代码片段: 经过大量研究并

  • 问题内容: 对于一个简单的数据结构,例如: 供参考,层次树如下所示: 我想计算每个级别的孩子人数。因此,我将获得一个新列“ NoOfChildren”,如下所示: 我读了一些有关分层数据的内容,但是我不知何故卡在了parentID的多个内部联接上。也许有人可以在这里帮助我。 问题答案: 使用 CTE可以满足您的需求。 递归地遍历所有孩子,记住根。 每个根的项目。 这些再次与您的原始表一起产生结果。