标签: recursive-query

使用CTE Oracle生成日期范围

我想在Oracle中使用递归WITH子句在两个不同日期之间生成一个天范围。

WITH CTE_Dates (cte_date) AS
  ( SELECT CAST(TO_DATE('10-02-2017', 'DD-MM-YYYY') AS DATE) cte_date FROM dual
  UNION ALL
  SELECT CAST( (cte_date + 1) AS DATE) cte_date
  FROM CTE_Dates
  WHERE TRUNC(cte_date) + 1 <= TO_DATE('20-02-2017', 'DD-MM-YYYY')
  )
SELECT * FROM CTE_Dates
Run Code Online (Sandbox Code Playgroud)

返回的结果与预期的完全不同:

10-02-2017
09-02-2017
08-02-2017
07-02-2017
06-02-2017
... (unlimited)
Run Code Online (Sandbox Code Playgroud)

预期结果:

10-02-2017
11-02-2017
...
19-02-2017
20-02-2017
Run Code Online (Sandbox Code Playgroud)

Oracle Database 11g Express Edition 11.2.0.2.0版-64位生产。

编辑: 据我了解,这是Oracle中的已知错误,该错误通过Oracle 11.2.0.2存在,并且已在11.2.0.3中修复。

替代解决方案:

SELECT TRUNC (TO_DATE('10-02-2017', 'DD-MM-YYYY') + ROWNUM -1) dt
  FROM DUAL
 CONNECT BY ROWNUM  <= (TO_DATE('20-02-2017', 'DD-MM-YYYY') - (TO_DATE('10-02-2017', …
Run Code Online (Sandbox Code Playgroud)

oracle recursive-query common-table-expression

3
推荐指数
1
解决办法
831
查看次数

如何用sql语句计算树的深度?

我不太明白递归查询是如何工作的以及如何解决这个问题。我们得到了左边的表,结构看起来像右边的树:

ID | Parent                        1
1     null                        / \
2     1                          2   3
3     1                               \
4     3                                4
5     4                               / \
6     4                              5   6   
7     6                                   \ 
                                           7 
Run Code Online (Sandbox Code Playgroud)

我知道如何获取每个节点的所有父节点...但我不知道如何找到树的最大深度。这意味着我必须找出这棵树有多少层。我们没有得到更多信息

如果你能给我一个 mysql 的解决方案,我将非常感激,但是任何 sql 语句都会帮助我解决这个问题

提前致谢!

mysql sql tree recursive-query

3
推荐指数
1
解决办法
2923
查看次数

如何在PostgreSQL中选择具有级别的表的所有层次结构

我现在有一个问题。我有一个名为地方的表,其结构如下:

  • ID
  • 父 ID
  • 姓名

我想做一个选择来拥有该表的所有层次结构。有一个数据的小例子:

(1, null, '123 Barclay St')
(2, 1, 'Floor 1')
(3, 1, 'Floor 2')
(4, 1, 'Floor 3')
(5, 2, 'Hall 1')
(6, 2, 'Room 1')
(7, 2, 'Room 2')
(8, 3, 'Room 3')
(9, null, '10 Thames St')
Run Code Online (Sandbox Code Playgroud)

显然表中的顺序不是这个。

所以我想用我的 SELECT 得到这个结果(有 9 行):

123 Barclay St
   Floor 1
      Hall 1
      Room 1
      Room 2
   Floor 2
      Room 3
   Floor 3
10 Thames St
Run Code Online (Sandbox Code Playgroud)

而不是这个结果(我已经知道如何得到):

10 Thames St
123 Barclay St
   Floor 1
   Floor …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursive-query hierarchical-data

3
推荐指数
2
解决办法
5249
查看次数

PostgreSQL,当没有可用的 ORDER BY 选项时反转递归查询

我有一个递归查询,它采用一个子行并查询可能可用的每个后续父行,并且当前按最子级到最父级的顺序返回结果集:

WITH recursive subdomains AS (
  SELECT id, parent_id, domain FROM domains WHERE id = '42b2af32-21a0-4212-b634-19ec47982e6b'
  UNION
  SELECT d.id, d.parent_id, d.domain FROM domains d 
  INNER JOIN subdomains s ON s.parent_id::text=d.id::text
) SELECT * FROM subdomains
Run Code Online (Sandbox Code Playgroud)

我想对此进行完全相反的操作,以便它将结果从最父项返回到最子项。添加一个递增索引列以便能够对其进行 ORDER BY 是否最有意义?

sql postgresql recursive-query

3
推荐指数
1
解决办法
1226
查看次数

实现递归 CTE 以对 MariaDB 进行分层查询

我有这个表,我想存储一系列记录。

CREATE TABLE table_name (
    id INT,
    unique_id varchar,
    reference_id varchar,
);
Run Code Online (Sandbox Code Playgroud)

我想为 MariDB 实现 SQL 查询,它通过 unique_id 和所有记录 reference_id 打印所有记录。像这样的东西:

| id | unique_id | reference_id |   |   |
|----|-----------|--------------|---|---|
| 43 | 55544     |              |   |   |
| 45 | 45454     | 43           |   |   |
| 66 | 55655     | 45           |   |   |
| 78 | 88877     | 66           |   |   |
| 99 | 454       | 33           |   |   |
Run Code Online (Sandbox Code Playgroud)

我希望当我选择记录 55544 来获取所有交易时,因为彼此都使用指向它们的 id。我如何使用递归 CTE …

sql jpa recursive-query mariadb jpa-2.0

3
推荐指数
2
解决办法
3268
查看次数

Postgres 递归查询 - 获取给定叶节点的根路径

我在树结构中有一个叶节点,我需要一个 Postgres 查询来递归遍历父节点以获得叶节点的完整路径。

我的表看起来像这样 - 问题是没有特定的根节点(即最顶层的经理最终互相报告)

+----+------------+-------+
| id | manager_id | name  |
+----+------------+-------+
|  1 |          2 | Matt  |
|  2 |          1 | Simon |
|  3 |          1 | John  |
|  4 |          2 | Bob   |
|  5 |          4 | Bill  |
+----+------------+-------+
Run Code Online (Sandbox Code Playgroud)

对于像比尔这样的用户,(id=5)我正在寻找他们的报告线:

Matt > Simon > Bob > Bill(理想情况下,当它尝试前往已遍历的节点时,它会停在 Matt 处)

sql postgresql recursive-query common-table-expression

3
推荐指数
1
解决办法
1729
查看次数

oracle中列的层次总和

我有一个问题如下:

ID NAME  AMOUNT PARENTID  
1  Adam  1000   0  
2  John  2000   1  
3  Clark 1500   2  
4  Rita  1200   3  
5  jack  1600   3  
6  mark  1800   2  
7  Finn  1500   6  
8  Ryan  1100   6
Run Code Online (Sandbox Code Playgroud)

所以上面数据是具有多个连接的查询的结果, 它是一种层次结构或树,如下所示:

       1  
       |  
       2  
     /  \   
   3      6  
  / \     / \  
5   4    7   8 
Run Code Online (Sandbox Code Playgroud)

现在我需要修改我的查询,以便得到以下结果

ID NAME  AMOUNT PARENTID  DownstreamSum   
1  Adam  1000   0         10700     
2  John  2000   1         8700      
3  Clark 1500   2         2800      
4  Rita …
Run Code Online (Sandbox Code Playgroud)

sql oracle recursive-query hierarchical-data

3
推荐指数
1
解决办法
108
查看次数

一旦满足条件就停止postgres中的递归

我有这张层次结构表

select * from product_categories;
 id | parent_id |     item     |     rule
----+-----------+--------------+---------------
  1 |           | ecomm        |
  2 |         1 | grocceries   |
  3 |         1 | electronics  |
  5 |         3 | TV           |
  6 |         4 | touch_screen | Rules applied
  7 |         4 | qwerty       |
  8 |         6 | iphone       |
  4 |         3 | mobile       | mobile rules
Run Code Online (Sandbox Code Playgroud)

我想从 iPhone 进行遍历,一旦遇到“规则”不为 NULL 的行,我想选择该行并完成递归,我正在使用这个查询,

WITH RECURSIVE items AS (
        SELECT id, item, parent_id, rule
        FROM …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursive-query common-table-expression

3
推荐指数
1
解决办法
733
查看次数

MySQL递归树搜索

我有一个数据库,其名称树可以下降到总共9个级别,我需要能够从分支上的任何点向下搜索树的信号分支.

数据库:

+----------------------+
| id |  name  | parent |
+----------------------+
| 1  |  tom   |   0    |
| 2  |  bob   |   0    |
| 3  |  fred  |   1    |
| 4  |  tim   |   2    |
| 5  |  leo   |   4    |
| 6  |  sam   |   4    |
| 7  |  joe   |   6    |
| 8  |  jay   |   3    |
| 9  |  jim   |   5    |
+----------------------+
Run Code Online (Sandbox Code Playgroud)

树:

tom
 fred
  jay
bob …
Run Code Online (Sandbox Code Playgroud)

php mysql recursive-query

2
推荐指数
1
解决办法
6455
查看次数

如何在SQL Server中执行上层递归自联接?

如何在SQL Server中进行递归自联接?我有这样一张桌子:

TableID | ParentID
   1    |     NULL
   2    |        1
   3    |        1
   4    |        3
   5    |     NULL
   6    |        4
   7    |        6

我希望得到以下结果,基于给出TableID所有ParentsID相关的TableID,让我们说我想得到所有的父母TableID = 6:

TableID
   6
   4
   3
   1

我坚持这个,我不知道如何在SQL查询中得到结果...希望告诉我SQL查询获取以前的数据

sql-server self-join recursive-query

2
推荐指数
1
解决办法
1993
查看次数