标签: recursive-query

在 SQL 中复制父子结构

我有一张桌子MODELS,有几个ITEMS可以属于。该ITEMS表是一个分层表,PARENT列上有一个自联接。根级别的项目将NullPARENT. 项目可以深入任何级别。

create table MODELS (
   MODELID              int                  identity,
   MODELNAME            nvarchar(200)         not null,
   constraint PK_MODELS primary key (MODELID)
)
go

create table ITEMS (
   ITEMID               int                  identity,
   MODELID              int                  not null,
   PARENT               int                  null,
   ITEMNUM              nvarchar(20)         not null,
   constraint PK_ITEMS primary key (ITEMID)
)
go

alter table ITEMS
   add constraint FK_ITEMS_MODEL foreign key (MODELID)
      references MODELS (MODELID)
go

alter table ITEMS
   add constraint FK_ITEMS_ITEMS foreign key (PARENT)
      references …
Run Code Online (Sandbox Code Playgroud)

sql sql-server stored-procedures recursive-query sql-server-2008

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

SQLAlchemy简单递归cte查询

我有以下 SQLAlchemy 表:

\n\n\n\n
from sqlalchemy.ext.declarative import declarative_base\n\nBase = declarative_base()\n\nclass NetworkLink(Base):\n    """Network immediate link between a franchisee and his franchisor\n\n    """\n    __tablename__ = \'network_link\'\n\n    id_franchisee = Column(Integer, ForeignKey(\'user.id\'), primary_key=True)\n    id_franchisor = Column(Integer, ForeignKey(\'user.id\'))\n
Run Code Online (Sandbox Code Playgroud)\n\n

它基本上代表了一个树状的网络结构。

\n\n

给定特许人的 id,我需要获取整个子树中所有后代的 id。\n例如,如果表如下:

\n\n
id_franchisor | id_franchisee \n1 | 2\n1 | 3\n2 | 4\n2 | 5\n4 | 6\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后给定 id 1 我需要 1,2,3,4,5,6,而给定 2 我需要 2,4,5,6。

\n\n

我知道这不是解决此问题的最有效的表表示形式,但此操作将很少执行,并且插入将更加常见。

\n\n

我正在尝试使用递归查询来实现此功能,如下所示:

\n\n
"""\nWITH RECURSIVE recursive_franchisee(id) AS\n(\n    SELECT %s\n    UNION ALL\n    SELECT L.id_franchisee\n    FROM recursive_franchisee …
Run Code Online (Sandbox Code Playgroud)

python sqlalchemy recursive-query common-table-expression

6
推荐指数
0
解决办法
8708
查看次数

MySQL-递归列出表中所有项目的所有父项和祖先

我有一个带有父/子层次结构的表,支持多个(理论上无限)级别的嵌套:

|------|-------------------|-------------|
|  id  |       title       |  parent_id  |
|------|-------------------|-------------|
|  1   |    Dashboard      |      0      |
|  2   |    Content        |      0      |
|  3   |    Modules        |      0      |
|  17  |    User Modules   |      3      |
|  31  |    Categories     |      17     |
|  ... |                   |             |
|------|-------------------|-------------|
Run Code Online (Sandbox Code Playgroud)

我正在尝试构建一个查询,生成每个项目的父项的串联列表,直到树中的最高父项:

|------|----------------------|
|  id  | concatenatedParents  |
|------|----------------------|
|  1   |  0                   |
|  2   |  0                   |
|  3   |  0                   |
|  17  |  3,0                 | …
Run Code Online (Sandbox Code Playgroud)

mysql sql recursive-query common-table-expression hierarchical-data

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

是否有可能强制SQL Server使用我想要优化递归cte查询的计划

我在一个视图中使用一个大型树上的递归cte查询,当使用硬编码但不使用参数查询时,该查询效果很好.是否有可能强制SQL Server使用我想要优化此递归cte查询的计划?任何想法,将不胜感激.

以下是递归CTE的视图 - 它检索给定实体下的所有节点:

CREATE VIEW adams_test_view AS
WITH eq_mi_cte(miId, eqId, miName, miCode) AS
    (SELECT ent.id, ent.id, ent.name, ent.code
    FROM entity ent
    UNION ALL
    SELECT e.id, eq_mi_cte.eqid, e.name, e.code
    FROM entity e
    INNER JOIN eq_mi_cte ON e.pid = eq_mi_cte.miid)
SELECT * FROM eq_mi_cte
Run Code Online (Sandbox Code Playgroud)

带有参数的视图上的查询似乎查询整个视图然后过滤它,因为树太大而从未完成 - 我们得到最大的递归错误:

DECLARE @TopLevelEnt int
SET @TopLevelEnt = 187317;
select * from adams_test_view
WHERE eqId = @TopLevelEnt
Run Code Online (Sandbox Code Playgroud)

这是计划(我对索引名称的应用):

  |--Filter(WHERE:([Recr1009]=[@TopLevelEnt]))
       |--Index Spool(WITH STACK)
            |--Concatenation
                 |--Compute Scalar(DEFINE:([Expr1012]=(0)))
                 |    |--Index Scan(OBJECT:([local_dbname].[dbo].[Entity].[EntityParentId] AS [ent]))
                 |--Assert(WHERE:(CASE WHEN [Expr1014]>(100) THEN (0) …
Run Code Online (Sandbox Code Playgroud)

sql-server performance sql-server-2005 recursive-query

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

生成从每个节点到树的根的路径,表示为表中的边

我在PostgreSQL数据库上有下表(parent_fk是引用同一个表的外键):

id    |    parent_fk
72    |    
342   |    72
583   |    342
Run Code Online (Sandbox Code Playgroud)

我想查询这个表,并通过中间父/子关系发现每个元素到最终父元素的路径.例如,我想获得以下作为SQL查询的答案:

id    |    parent_fk    |    path
72    |                 |     72
342   |    72           |    72;342
583   |    342          |   72;342;583
Run Code Online (Sandbox Code Playgroud)

我读过关于PostgreSQL的CTE(公用表表达式)和递归查询,但我自己还是无法解决这个问题.有任何想法吗?提前致谢.

postgresql tree hierarchy recursive-query hierarchical-data

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

postgres中的递归函数

如何将下面的查询映射到postgres函数.

WITH RECURSIVE source (counter, product) AS (
SELECT
1, 1
UNION ALL
SELECT
counter + 1, product * (counter + 1)
FROM source
WHERE
counter < 10
)
SELECT counter, product FROM source;
Run Code Online (Sandbox Code Playgroud)

我是postgres的新手.我想使用PL/pgsql函数实现相同的功能.

postgresql plpgsql recursive-query postgresql-9.2

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

SQL分组交互/重叠行

我在那有重叠的两列数据的Postgres下表a_snob_sno.

create table data
( a_sno integer not null,  
  b_sno integer not null,
  PRIMARY KEY (a_sno,b_sno)
);

insert into data (a_sno,b_sno) values
  ( 4, 5 )
, ( 5, 4 )
, ( 5, 6 )
, ( 6, 5 )
, ( 6, 7 )
, ( 7, 6 )
, ( 9, 10)
, ( 9, 13)
, (10, 9 )
, (13, 9 )
, (10, 13)
, (13, 10)
, (10, 14) …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursive-query common-table-expression

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

Postgres计数与自引用连接条件

鉴于以下结构

CREATE TABLE products (
    id integer NOT NULL,
    subcategory_id integer,
    stack_id integer,
)

CREATE TABLE subcategories (
  id integer NOT NULL,
  name character varying(255)
)
Run Code Online (Sandbox Code Playgroud)

products.stack_id是一种回归产品的自我参照关系.

我基本上试图计算子类别加入产品

products.subcategory_id = subcategories.id  
Run Code Online (Sandbox Code Playgroud)

但是每个不同的堆栈组将计数限制为一次.

样本子类别表

id    name
1     subcategory_1
2     subcategory_2
3     subcategory_3
Run Code Online (Sandbox Code Playgroud)

样品表

id    subcategory_id    stack_id    
1     1                 NULL        
2     1                 1           
3     2                 1           
4     3                 1           
5     2                 NULL        
6     2                 5           
7     2                 5           
8     2                 NULL        
9     3                 8           
10    3                 8 
Run Code Online (Sandbox Code Playgroud)

样本所需的输出

id    name             total 
1 …
Run Code Online (Sandbox Code Playgroud)

postgresql recursive-query

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

Oracle:将国家/地区划分为N个边界

我想让所有国家从指定国家的N(1,2,3,4 ......)边界分开.

N也应该指定.

例如,我有"border"和"country"表:


border | neighbor
-----------------
  FR   |   DE
  FR   |   IT
  IT   |   FR
  DE   |   FR
  DE   |   PL
  PL   |   DE
  DE   |   DK
  DK   |   DE


CODE COUNTRYNAME  
---- ---------
FR   France   
DE   Germany
RU   Russia   
IT   Italy
PL   Poland      
DK   Denmark
  1. N = 2&country = France

如果我想让国家与法国分开2个边界,它应该返回波兰(FR - > DE - > PL)和丹麦(FR - > DE - > DK)

  1. N = 1&country = France

如果我想让国家与法国分开1个边界,它应该返回德国(FR - > DE)和意大利(FR - > IT)

如果需要,我可以修改边框.

我尝试了一些分层查询但没有成功. …

sql oracle connect-by recursive-query oracle11g

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

SQL Server:使用递归CTE来解决组成员身份

我有一张桌子(users_groups):

+-----------+------------+---------+
| groupGUID | memberGUID | isGroup |
+-----------+------------+---------+
|  32AB160C |   5B277276 |       0 |
|  32AB160C |   0A023D1D |       0 |
|  5C952B2E |   32AB160C |       1 |
|  4444FTG5 |   5C952B2E |       1 |
+-----------+------------+---------+
Run Code Online (Sandbox Code Playgroud)

isGroup列指示是否memberGUID为组。

我想获取一个新的表(new_users_groups),所有组成员身份均已解决:

+-----------+------------+
| groupGUID | memberGUID |
+-----------+------------+
|  32AB160C |   5B277276 |
|  32AB160C |   0A023D1D |
|  5C952B2E |   5B277276 |
|  5C952B2E |   0A023D1D |
|  4444FTG5 |   5B277276 | …
Run Code Online (Sandbox Code Playgroud)

sql sql-server recursion recursive-query

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