标签: recursive-query

递归SQL将CSV拆分为表行

在SO上处理一个不同的问题之后,我偶然发现了递归的CTE,表面上似乎是解决"将csv拆分为表行"问题的一种相当简单的方法.

我把这个例子放在一起

DECLARE @InputString varchar(255) = 'a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'

SELECT @InputString = @InputString + ','
;
with MyCTE(x,y)
as 
(
    SELECT 
        x = SUBSTRING(@InputString,0,PATINDEX('%,%',@InputString)),
        y = SUBSTRING(@InputString,PATINDEX('%,%',@InputString)+1,LEN(@InputString))
    UNION ALL
        SELECT 
            x = SUBSTRING(y,0,PATINDEX('%,%',y)),
            y = SUBSTRING(y,PATINDEX('%,%',y)+1,LEN(y))
        FROM 
            MyCTE 
        WHERE
                SUBSTRING(y,PATINDEX('%,%',y)+1,LEN(y)) <> '' OR 
            SUBSTRING(y,0,PATINDEX('%,%',y)) <> ''
)
SELECT x FROM MyCTE
OPTION (MAXRECURSION 2000);
GO
Run Code Online (Sandbox Code Playgroud)

这真是个坏主意吗?对于像这样的递归查询,SQL的开销是多少,以及这种方法的潜在缺陷是什么.

顺便说一句,我想这样的想法/技术很可能被利用来解决这个问题的其他问题.

csv recursive-query sql-server-2008

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

加入一张桌子给自己

这是我的数据库表模板上的一个.

Id int PK
Title nvarchar(10) unique
ParentId int 
Run Code Online (Sandbox Code Playgroud)

这是我的问题.如果我在"Id"和"ParentId"列之间创建关系,是否存在问题?(我的意思是创建表与自身之间的关系)我需要一些关于在插入或更新期间可能发生的问题或在开发步骤中删除操作的建议.谢谢

sql sql-server recursion recursive-query sql-server-2008

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

Cakephp 2.0:如何通过find()递归检索数据的ORDER BY指令?

我正在尝试建立一个包含很多hasMany/hasOne关系的模型,我希望在"添加"视图的下拉菜单中按字母顺序显示所拥有的模型.我不确定如何向递归检索的模型提供ORER BY指令.这就是我尝试过的:

$services =  $this->service->find('all', array(
                                       'order'=>array(
                                               'Service.start_year DESC',
                                               'Servicecat.title DESC'
                                               ), 
                                        'recursive'=>0
                                          ) );
Run Code Online (Sandbox Code Playgroud)

但当然这没有变化.我怀疑它不是很复杂,我只是在cookbook/api中找不到解决方案.想法?

model-view-controller sql-order-by recursive-query cakephp-2.0

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

递归方法没有给出正确的值

我想使用递归方法但是无法使其正常工作.

例如,在这个程序中,为什么当我显示我的时候b,值是0而不是10?

public static void main(String[] args) {
     int a = 0;

     int b = recursivMethod(a);
     System.out.println(b);
}

static int recursivMethod(int a)
{
    if(a != 10)
        recursivMethod(a+1);

    return a;
}
Run Code Online (Sandbox Code Playgroud)

java recursive-query

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

在sql server中联合递归查询

我需要结合两个不同的递归查询.有些想法:

with cte1 as
( select....
....
....
)
select * from cte1

union all

with cte2 as
( select....
....
....
)
select * from cte2
Run Code Online (Sandbox Code Playgroud)

我该怎么做?我收到错误:关键字'WITH'附近的语法不正确.

你知道任何workaroud吗?我试图通过互联网搜索,但我找不到它..

sql sql-server recursive-query

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

带外连接的递归查询?

我正在尝试以下查询,

DECLARE @EntityType varchar(25)
SET @EntityType = 'Accessory';

WITH Entities (
        E_ID, E_Type,
        P_ID, P_Name, P_DataType, P_Required, P_OnlyOne,
        PV_ID, PV_Value, PV_EntityID, PV_ValueEntityID,
        PV_UnitValueID, PV_UnitID, PV_UnitName, PV_UnitDesc, PV_MeasureID, PV_MeasureName, PV_UnitValue,
        PV_SelectionID, PV_DropDownID, PV_DropDownName, PV_DropDownOptionID, PV_DropDownOptionName, PV_DropDownOptionDesc,
        RecursiveLevel
    )
AS
(
    -- Original Query
    SELECT dbo.Entity.ID AS E_ID, dbo.EntityType.Name AS E_Type,
    dbo.Property.ID AS P_ID, dbo.Property.Name AS P_Name, DataType.Name AS P_DataType, Required AS P_Required, OnlyOne AS P_OnlyOne,
    dbo.PropertyValue.ID AS PV_ID, dbo.PropertyValue.Value AS PV_Value, dbo.PropertyValue.EntityID AS PV_EntityID, dbo.PropertyValue.ValueEntityID AS PV_ValueEntityID,
    dbo.UnitValue.ID AS PV_UnitValueID, dbo.UnitOfMeasure.ID …
Run Code Online (Sandbox Code Playgroud)

sql sql-server recursive-query outer-join

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

父子层次结构的递归查询。从顶级节点获取后代

我有一个表,它以父子格式存储层次结构数据,并带有一个顶部节点。多个级别,每个父母都有多个孩子。如何编写递归查询以仅选择从特定节点到最后一个子节点的父子行?

示例表

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

如何仅从节点 3 及其所有后代中检索行?

sql recursive-query hierarchical-data

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

基于邻接表的层次数据递归查询

学习SQL,遇到一点问题。我有 2 张level桌子level_hierarchy

|name        | id |     |parent_id | child_id|
-------------------     ---------------------
| Level1_a   | 1  |     | NULL     |    1    |
| Level2_a   | 19 |     | 1        |    19   |
| Level2_b   | 3  |     | 1        |    3    |
| Level3_a   | 4  |     | 3        |    4    |
| Level3_b   | 5  |     | 3        |    5    | 
| Level4_a   | 6  |     | 5        |    6    | 
| Level4_b   | 7  | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql recursive-query hierarchical-data

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

为什么这种递归连接会产生:数据太长

我在 MySQL 8 上有这个表:

create table tbl(id varchar(2), val int);
insert into tbl values ('A',  1), ('B',  2), ('C',  3), ('D',  4), ('E',  5);
Run Code Online (Sandbox Code Playgroud)

以下查询应找出哪些记录集的值加起来不大于 6(不考虑顺序):

with recursive cte(greatest_id, ids, total) as (
    select     id,
               concat(id, ''), 
               val
    from       tbl
    union all
    select     tbl.id,
               concat(cte.ids, tbl.id),
               cte.total + tbl.val
    from       cte 
    inner join tbl 
            on tbl.id > cte.greatest_id
           and cte.total + tbl.val <= 6
) 
select ids, total from cte
Run Code Online (Sandbox Code Playgroud)

运行它会导致以下错误:

错误:ER_DATA_TOO_LONG:concat(id, '')第 7行列的数据太长

为什么 MySQL 会产生这个错误? …

mysql varchar concat recursive-query

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

如何找到导致 ORA-01436 的不正当数据

我有一个查询来查看父子层次数据列表。在运行下面的查询时,我得到了错误ORA-01436

SELECT ParentPropertyRSN, CONNECT_BY_ROOT PropertyRSN as PropertyRSN,
   LEVEL, SYS_CONNECT_BY_PATH(ParentPropertyRSN, '/') Path
FROM Property
   CONNECT BY PRIOR PropertyRSN = ParentPropertyRSN
   order by level desc;
Run Code Online (Sandbox Code Playgroud)

所以我NOCYCLECONNECT BY子句中添加并获得了完整的数据列表及其分层路径

现在我需要的是一个查询来获取包含不准确数据的行列表ORA-01436

sql oracle recursive-query hierarchical-data hierarchical-query

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