标签: recursive

查询以查找循环引用

我有两张桌子

ID  Task
1   1
2   2
3   3
4   4

Col1  depend
2     3
2     4
3     1
4     2
Run Code Online (Sandbox Code Playgroud)

IDCol1通过 FK 约束相关。我想找出所有循环引用。这里IDCol1仅用于组合来自 2 个表的行,例如:

Task 1 can start anytime.
Task 2 can start only after completion of 3, 4 etc

1 –
2 – 3, 4, 1, 2   -- for 2 there is circular dependency
3 – 1
4 – 2, 3, 4      -- also circular dependency
Run Code Online (Sandbox Code Playgroud)

案例2:

Col1  depend
2 …
Run Code Online (Sandbox Code Playgroud)

postgresql cte postgresql-9.2 recursive

6
推荐指数
1
解决办法
3676
查看次数

使用多个表中的列提高 order by 的性能

使用 PostgreSQL 8.4,我试图使用 order by 和两个表的索引列查询两个包含 100 万条记录的表,并且我正在失去性能(1 列需要 30 毫秒,两列需要 5 分钟)。例如:

select r.code, r.test_code, r.sample_code, s.barcode, s.registry_date
from requests r
inner join samples s on (s.code = r.sample_code)
order by s.barcode  asc , r.code asc
limit 21;
Run Code Online (Sandbox Code Playgroud)

表信息:

CREATE TABLE public.samples (
  code BIGINT NOT NULL,
  barcode VARCHAR(40) NOT NULL,
  registry_date TIMESTAMP WITH TIME ZONE NOT NULL,
  CONSTRAINT samples_pkey PRIMARY KEY(code)
);

CREATE INDEX idx_samp_barcode ON public.samples (barcode);
CREATE INDEX idx_samp_barcode_code ON public.samples (barcode, code);
CREATE INDEX …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-8.4 recursive postgresql-performance

6
推荐指数
1
解决办法
2237
查看次数

递归 CTE 中的自联接:`递归引用不能出现多次`?

这是用 PostgreSQL 9.6 测试过的,但这是一个通用的 SQL 问题。

是否可以在递归 CTE (rCTE) 中使用递归表的自联接?

我尝试了以下包含递归项自联接的 rCTE x

WITH RECURSIVE
x (id) AS (
  SELECT 1 id UNION ALL SELECT x1.id+x2.id FROM x x1, x x2
  WHERE x1.id < 5 AND x2.id < 5 AND x1.id = x2.id
  )
SELECT * FROM x;
Run Code Online (Sandbox Code Playgroud)

,希望应该等同于:

WITH RECURSIVE
x (id) AS (
  SELECT 1 id UNION ALL SELECT id+id FROM x WHERE id < 5
  )
SELECT * FROM x;
Run Code Online (Sandbox Code Playgroud)

但是之前的 rCTE 会产生一个错误:

ERROR:  recursive reference …
Run Code Online (Sandbox Code Playgroud)

postgresql recursive postgresql-9.6 self-join

6
推荐指数
2
解决办法
1494
查看次数

帮助 CTE 递归聚合子级

我正在尝试创建一个查询来计算库存中所有项目的“可销售”数量。在这种情况下,一个项目可以有当前可用的库存,但也可以是一个套件,它由可以组装以形成成品的原材料组成。因此,可供出售的是当前可用的成品 (FG) 数量加上可以制成 FG 的最少组件。

例子:

假设我们正在销售由笔记本电脑和手提包组成的笔记本电脑套件。如果我们已经制作了 2 个套件,以及 6 台笔记本电脑和 3 个手提袋,那么我们可以出售的这些套件总共是 2 + 3 = 5。在这种情况下,手提袋是限制因素。尽管我们有 6 台笔记本电脑,但由于包包限制了我们,我们只能多制作 3 个套件。

我已经走了这么远,计算从最低级别 2 到级别 1,但级别 0 不正确。因此,在这种情况下,笔记本电脑套件的计算是正确的(手头有 11 个 + 我们可以再制造 4 个 = 15 个可供出售)。但顶级笔记本电脑和包包是不正确的。最高级别(笔记本电脑和包套件)的直接子代的最少可销售量是 15 + 3 现有套件 = 18,而不是 14。

在此处输入图片说明

我在想也许我需要添加第二个递归 CTE 而不是我在最终选择中的左连接?

SQL小提琴

CREATE TABLE Item (
  Id INT,
  ParentId INT,
  DisplaySeq INT,  
  DisplayText VARCHAR(30),
  OnHandQty INT
  );

INSERT INTO Item (Id, ParentId, DisplaySeq, DisplayText, OnHandQty) VALUES
(9, NULL, 0, 'Laptop & Bag Kit', 3), …
Run Code Online (Sandbox Code Playgroud)

sql-server cte recursive

6
推荐指数
1
解决办法
1225
查看次数

树节点计算 - SQL Server

我很感激我正在努力实现的一些帮助。

我公司制造的零件是由子组件和子组件的子组件构建的。这看起来像:

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

4 和 5 组合成 2,4 和 6 组成 3,然后组件 2、3 和 7 组成 1。

我的桌子看起来像这样;

+------+-----+-------+----------+----------------+
| ROOT | SUB | LEVEL | LEADTIME | TOP LEVEL PART |
+------+-----+-------+----------+----------------+
|    1 |   1 |     0 |        4 |              1 |
|    1 |   2 |     1 |        2 |              1 |
|    1 |   3 |     1 |        5 …
Run Code Online (Sandbox Code Playgroud)

sql-server query recursive

6
推荐指数
1
解决办法
190
查看次数

递归 CTE 中的字符串操作

我正在尝试进行以下工作:

WITH results(n, string ) AS (
            SELECT 1,'lol'
            UNION ALL
            SELECT n+1, string + ' lol'
            FROM results
            WHERE n<6
            )
            SELECT * FROM results
Run Code Online (Sandbox Code Playgroud)

但是 SQL 似乎无法识别第二列中的字符串连接并返回错误:

递归查询“结果”的“字符串”列中的锚点和递归部分之间的类型不匹配。

我想要的输出是这样的

1、哈哈

2、哈哈哈哈哈

3、哈哈哈哈哈

等等

sql-server cte recursive

6
推荐指数
1
解决办法
255
查看次数

如何计算 SQL 中输入字符串的所有分组排列?

给定像“ABC”这样的输入,生成一个查询,计算给定字符串的 0 个或多个的所有潜在分割,

期望的输出,

A   B   C
A   BC
AB  C
ABC
Run Code Online (Sandbox Code Playgroud)

给定一个像“ABCD”这样的输入

A    B   C    D
A    BC  D
A    B   CD
AB   C   D
A    BCD
AB   CD
ABC  D
ABCD
Run Code Online (Sandbox Code Playgroud)

并不是所有关心输出如何形成、数组、行、json 等。更多的是寻找分组的所有排列的离散列表。

postgresql query recursive

6
推荐指数
1
解决办法
1292
查看次数

计算二叉树结构中的节点数

给定一个特定的起始节点父 id ( pid) ,我需要计算二叉树结构中的左右节点(按 joinDate 分组的输出)。

树存储在下表中:

示例数据屏幕截图

例如,使用pid = 4您将获得 2 cid(5 和 11 ),然后您将使用它们作为新的pid(5, 11)。当cid为 null 或已遍历完整树时,计算所有placement = Land placement = R。其他位置如“M”应该被忽略。

插图:

在此处输入图片说明

选定起始节点 4 的预期输出:

+-----------+-------------+-------+
| placement | joiningDate | Total |
+-----------+-------------+-------+
| L         | 2015-02-02  |     3 |
| R         | 2015-02-02  |     1 |
| L         | 2015-08-21  |     4 |
| L         | 2015-12-12  |     1 |
+-----------+-------------+-------+
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2012 recursive

5
推荐指数
1
解决办法
2974
查看次数

从递归树结构创建 JSON 对象

具有这种简单的多对多自引用结构。
一个项目通过表拥有其他项目joins

CREATE TABLE items (
  item_id   serial PRIMARY KEY
, title     text
);

CREATE TABLE joins (
  id        serial PRIMARY KEY
, item_id   int
, child_id  int
);

INSERT INTO items (item_id, title) VALUES
  (1, 'PARENT')
, (2, 'LEVEL 2')
, (3, 'LEVEL 3.1')
, (4, 'LEVEL 4.1')
, (5, 'LEVEL 4.2')
, (6, 'LEVEL 3.2')
;

INSERT INTO joins (item_id, child_id) VALUES
  (1, 2)
, (2, 3)
, (3, 4)
, (3, 5)
, (2, 6) …
Run Code Online (Sandbox Code Playgroud)

postgresql tree cte json recursive

5
推荐指数
1
解决办法
7183
查看次数

如何将一组扁平树变成一棵具有多个叶子的树?

我们有这个漂亮的 Postgres 树生成器。然而,它会产生一棵树的切口,而不是一次产生整棵树:

item_id jsonb_pretty
1   {
    "title": "PARENT",
    "item_id": 1,
    "children": {
        "title": "LEVEL 2",
        "item_id": 2,
        "children": {
            "title": "LEVEL 3.2",
            "item_id": 6
        }
    }
}
1   {
    "title": "PARENT",
    "item_id": 1,
    "children": {
        "title": "LEVEL 2",
        "item_id": 2,
        "children": {
            "title": "LEVEL 3.1",
            "item_id": 3,
            "children": {
                "title": "LEVEL 4.1",
                "item_id": 4
            }
        }
    }
}
1   {
    "title": "PARENT",
    "item_id": 1,
    "children": {
        "title": "LEVEL 2",
        "item_id": 2,
        "children": {
            "title": "LEVEL 3.1",
            "item_id": …
Run Code Online (Sandbox Code Playgroud)

postgresql tree cte json recursive

5
推荐指数
1
解决办法
1478
查看次数