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

在一个SQL查询中获取所有父行

邓毅
2023-03-14
问题内容

我有一个简单的MySQL表,其中包含类别列表,级别由parent_id确定:

id  name    parent_id
---------------------------
1   Home        0
2   About       1
3   Contact     1
4   Legal       2
5   Privacy     4
6   Products    1
7   Support     1

我正在尝试进行面包屑跟踪。因此,我有孩子的“身份证”,我想让所有可用的父母(重复链,直到我们达到0“家”)。可能有任意数量或子行达到无限深度。

目前,我正在为每个父母使用SQL调用,这很麻烦。SQL中有一种方法可以对一个查询执行全部操作吗?


问题答案:

从这里改编:

SELECT T2.id, T2.name
FROM (
    SELECT
        @r AS _id,
        (SELECT @r := parent_id FROM table1 WHERE id = _id) AS parent_id,
        @l := @l + 1 AS lvl
    FROM
        (SELECT @r := 5, @l := 0) vars,
        table1 h
    WHERE @r <> 0) T1
JOIN table1 T2
ON T1._id = T2.id
ORDER BY T1.lvl DESC

该行@r := 5是当前页面的页码。结果如下:

1, 'Home'
2, 'About'
4, 'Legal'
5, 'Privacy'


 类似资料:
  • 我需要一种方法来收集在Oracle DB(Oracle数据库11g)中执行的所有查询在过去的几个小时内,无论查询有多快(这将用于计算sql覆盖率后,对我的应用程序运行测试,其中有几个点执行查询)。 我不能使用像V$SQL这样的表,因为不能保证查询会在那里保持足够长的时间。我似乎可以使用DBA_HIST_SQLTEXT,但是我没有找到过滤掉当前测试运行前执行的查询的方法。 所以我的问题是:我可以使用

  • 问题内容: 我需要选择数据库中上个月创建的所有行。 例如,如果当前月份是一月,那么我想返回在十二月创建的所有行,如果月份是二月,那么我想返回在一月份创建的所有行。我的数据库中有一列,其中列出了以此格式创建的日期:。 问题答案:

  • 问题内容: 关闭。 此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Stack Overflow 的主题。 6年前关闭。 我的mySQL数据库中有如下表: 对于谓词,它将具有如下树视图: 我想创建一个可以选择起始节点并为此获得所有父节点的表单。例如,通过选择我想要获得: 步骤2: 有什么方法可以使用以下简单文本来打印此节点: 问题答案: 您的数据可以在RDF中表

  • 我使用多个SQL查询来完成一个表,但我认为也可以只使用一个查询就得到它。结构如下: 有表'WP_PostMeta';包括id、post_id、meta_key和meta_value作为列。在该表中,meta_key=x的行在meta_value部分中有用户ID值。我想用给定的meta_key和用户id值(在meta_value部分)获得post_id值,并用该post_id获得给定meta_key

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

  • 问题内容: 如果每个员工有多个联系方式,我将获得多行,但我只希望每位员工列出他们的姓,名,部门名称,电子邮件和电话。 所以它应该像这样 这是我所拥有的,但不起作用: 我用以下查询解决了它: 问题答案: 如果要选择,则在子查询中,这两个联接可能是不必要的: 由于它们,您得到的行与特定人的联系人一样多。 最终查询可能类似于: