如何从一张表中获得我想要的视图结果
Posted
技术标签:
【中文标题】如何从一张表中获得我想要的视图结果【英文标题】:How to get my desired view result from one table 【发布时间】:2016-12-04 17:32:22 【问题描述】:我有一个表(mytable),如下例所示,其中包含任何集合都有的项目:
CollCode | ItemCode
---------+---------
101 | 201
101 | 202
101 | 203
202 | 204
202 | 205
我想从这个表中取回一个视图,结果是这样的:
CollCode | ItemCode
---------+----------
101 | 201
101 | 202
101 | 203
101 | 204
101 | 205
202 | 204
202 | 205
这意味着我想要所有级别的集合的所有项目,而不仅仅是第一级。
【问题讨论】:
【参考方案1】:您正在寻找递归 CTE。试试这个:
with t(CollCode, ItemCode) as (
values (101, 201), (101, 202), (101, 203),
(202, 204), (202, 205)
),
cte as (
select t.CollCode, t.ItemCode
from t
union all
select cte.CollCode, t.ItemCode
from cte join
t
on t.collCode = cte.ItemCode
)
select *
from cte
order by collCode;
(很明显,CTE t
只是为了提供示例数据来证明这是可行的。)
编辑:
要删除中间结果:
select *
from cte
where not exists (select 1 from t t2 where t2.collCode = cte.ItemCode)
order by collCode;
【讨论】:
我有点困惑。请按照说明给我创建所需视图的代码。 @AAAE_N 只需在 SQL 之前添加“create view my_view_name as”即可。 @arturro 上面代码中带有示例数据的 t 表怎么样。我的表有一千多条记录。 @AAAE_N 只需将 t 替换为您的表并将其从 sql 中删除: create view my_view as with cte as ( select CollCode, ItemCode from my_table union all select cte.CollCode, my_table.ItemCode from cte join my_table on my_table.collCode = cte.ItemCode ) select * from cte order by collCode; 感谢 @arturro 和 Gordon Linoff以上是关于如何从一张表中获得我想要的视图结果的主要内容,如果未能解决你的问题,请参考以下文章