我有一张桌子MODELS,有几个ITEMS可以属于。该ITEMS表是一个分层表,PARENT列上有一个自联接。根级别的项目将Null在PARENT. 项目可以深入任何级别。
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
我有以下 SQLAlchemy 表:
\n\n\n\nfrom 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\'))\nRun Code Online (Sandbox Code Playgroud)\n\n它基本上代表了一个树状的网络结构。
\n\n给定特许人的 id,我需要获取整个子树中所有后代的 id。\n例如,如果表如下:
\n\nid_franchisor | id_franchisee \n1 | 2\n1 | 3\n2 | 4\n2 | 5\n4 | 6\nRun 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) 我有一个带有父/子层次结构的表,支持多个(理论上无限)级别的嵌套:
|------|-------------------|-------------|
| 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
我在一个视图中使用一个大型树上的递归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) 我在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(公用表表达式)和递归查询,但我自己还是无法解决这个问题.有任何想法吗?提前致谢.
如何将下面的查询映射到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函数实现相同的功能.
我在那有重叠的两列数据的Postgres下表a_sno和b_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) 鉴于以下结构
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) 我想让所有国家从指定国家的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
如果我想让国家与法国分开2个边界,它应该返回波兰(FR - > DE - > PL)和丹麦(FR - > DE - > DK)
如果我想让国家与法国分开1个边界,它应该返回德国(FR - > DE)和意大利(FR - > IT)
如果需要,我可以修改边框.
我尝试了一些分层查询但没有成功. …
我有一张桌子(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) recursive-query ×10
sql ×5
postgresql ×4
sql-server ×3
connect-by ×1
hierarchy ×1
mysql ×1
oracle ×1
oracle11g ×1
performance ×1
plpgsql ×1
python ×1
recursion ×1
sqlalchemy ×1
tree ×1