在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的开销是多少,以及这种方法的潜在缺陷是什么.
顺便说一句,我想这样的想法/技术很可能被利用来解决这个问题的其他问题.
这是我的数据库表模板上的一个.
Id int PK
Title nvarchar(10) unique
ParentId int
Run Code Online (Sandbox Code Playgroud)
这是我的问题.如果我在"Id"和"ParentId"列之间创建关系,是否存在问题?(我的意思是创建表与自身之间的关系)我需要一些关于在插入或更新期间可能发生的问题或在开发步骤中删除操作的建议.谢谢
我正在尝试建立一个包含很多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
我想使用递归方法但是无法使其正常工作.
例如,在这个程序中,为什么当我显示我的时候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) 我需要结合两个不同的递归查询.有些想法:
with cte1 as
( select....
....
....
)
select * from cte1
union all
with cte2 as
( select....
....
....
)
select * from cte2
Run Code Online (Sandbox Code Playgroud)
我该怎么做?我收到错误:关键字'WITH'附近的语法不正确.
你知道任何workaroud吗?我试图通过互联网搜索,但我找不到它..
我正在尝试以下查询,
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) 我有一个表,它以父子格式存储层次结构数据,并带有一个顶部节点。多个级别,每个父母都有多个孩子。如何编写递归查询以仅选择从特定节点到最后一个子节点的父子行?
示例表
Parent|child
1 |2
1 |3
2 |4
2 |5
3 |6
3 |7
6 |8
Run Code Online (Sandbox Code Playgroud)
如何仅从节点 3 及其所有后代中检索行?
学习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) 我在 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 会产生这个错误? …
我有一个查询来查看父子层次数据列表。在运行下面的查询时,我得到了错误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)
所以我NOCYCLE在CONNECT BY子句中添加并获得了完整的数据列表及其分层路径
现在我需要的是一个查询来获取包含不准确数据的行列表ORA-01436。
sql oracle recursive-query hierarchical-data hierarchical-query
recursive-query ×10
sql ×6
sql-server ×3
cakephp-2.0 ×1
concat ×1
csv ×1
java ×1
mysql ×1
oracle ×1
outer-join ×1
postgresql ×1
recursion ×1
sql-order-by ×1
varchar ×1