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

MySQL父级子级一个查询选择

申嘉慕
2023-03-14
问题内容

我有一个具有以下字段的MySQL表:

id            name             parent
1             Fruit             0
2             Meat              0
3             Orange            1
4             Beef              2

其中父字段表示上层ID。例如,水果id是1,橙色是水果之一,因此父对象是1。

但是我想做一个有效的MySQL查询来获取所有记录,格式为parent-> children-> parent->
children格式。我怎样才能做到这一点?

查询的结果记录应类似于:

id            name             parent
1             Fruit             0
3             Orange            1
2             Meat              0
4             Beef              2

问题答案:

您需要mysql不支持的递归联接。您唯一可以做的就是确定最大深度(由于p-> c,所以我将其设置为1),并以此确定所需的联接数:

最大深度=自连接数

SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id,
    c1.name as child_name
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
WHERE
    p.parent=0

例如,如果最大深度为3,则需要3个自联接:

SELECT
    p.id as parent_id,
    p.name as parent_id,
    c1.id as child_id_1,
    c1.name as child_name_1,
    c2.id as child_id_2,
    c2.name as child_name_2,
    c3.id as child_id_3,
    c3.name as child_name_3
FROM 
    my_table p
LEFT JOIN my_table c1
    ON c1.parent = p.id
LEFT JOIN my_table c2
    ON c2.parent = c1.id
LEFT JOIN my_table c3
    ON c3.parent = c2.id
WHERE
    p.parent=0


 类似资料:
  • 问题内容: 我的数据库中有一个页面表,每个页面可以有一个父项,如下所示: 如果选择一个以上级别,那么最好的MySQL查询是最好的选择父级,子级,子级顺序的所有页面的查询,最多三个级别。上面的示例将产生所需的顺序: 问题答案: 我认为您应该在表中再添加一个字段,称为level并将其存储在节点的level中,然后按级别然后按父级对查询进行排序。

  • 问题内容: 我不知道如何选择查询递归。 如何使用SqlServer取得这样的结果 问题答案: 您需要使用递归公用表表达式。 在线上有很多有用的文章。 有用的链接 简单谈谈:SQL Server CTE基础 blog.sqlauthority:递归CTE 这是您的问题的解决方案:

  • 问题内容: 我有一个希望很简单的MySQL查询问题,在深夜使我难以理解。我正在尝试执行SELECT,该SELECT计算一组数据(订单)的实例数量,并通过在订单本身上方几层的父级中存在的值对这些实例进行分组。 例如: 我正在寻找的是以下附近的东西: SELECT count(orders.id),categoryId来自订单,类别(1,2,3)中的WHERE order.customer_id,GR

  • 我有以下html: 正如你所看到的那样。子列表div总是跟在带和一些文本的后面,就像div是h2的子列表一样(h2是子列表的标题)。另一个包含锚定标记。 我想得到div. sublist之前的所有h2标签。 这是我当前的xpath子句: 我最终得到了不同的元素(a、div、img),但h2元素。

  • 问题内容: 在下面的例子中 我懂了 在我的数据库中,表中有数百万行,而且层次结构又深又宽,我对所有子级都不感兴趣。我可以派生出我感兴趣的孩子。因此,我想打开查询并向START WITH提供孩子ID。然后,我想递归输出父级,直到到达顶部。在我的情况下,顶部是id和parent_id相等的地方。这是我正在尝试的方法,但无法显示顶级父级。 这给了我 它没有输出AA。可以这样做吗?我希望不会在输出中将pa

  • 问题内容: 我有这个架构 样本数据 SQL Fiddle演示。我已经插入了一些示例数据。 查兰芝 我需要找到唱片标题的所有父母。如何仅通过一个查询就可以获取所有父母? 我的意思是我需要这个结果: 期望的输出 假设我想使用其所有父项来获取条目,并且要使用where条件,那么它应该获取上述记录。 问题答案: 演示版