【发布时间】:2021-04-11 06:35:08
【问题描述】:
我有一个关于分层 SQL 的问题。
样本数据:
create table group_ (
group_id number);
create table set_(
set_id number);
insert into group_ values(1);
insert into group_ values(2);
insert into group_ values(3);
insert into set_ values(1);
insert into set_ values(2);
SQL:
SELECT group_id,
sys_connect_by_path(set_id, ', '), LEVEL
FROM set_
CROSS JOIN group_
CONNECT BY prior set_id < set_id
ORDER BY group_id, combo nulls first,lvl;
我的目标是获得 2 个表的所有可能组合,并且它正在工作,但我有重复的值,所以我必须使用不同/唯一的 caluse。 问题是 - 它们为什么会出现?
【问题讨论】:
-
“它正在工作”?这不是真的(无论如何,不是您发布的查询;也许您运行了其他东西)。例如,您在
order by中有combo和lvl,但它们没有在查询中的其他任何地方定义。所以,让我们从那个开始。然后:“两张表的所有可能组合”是什么意思?我不知道那是什么意思。在您的查询中,您交叉加入group,但您不会在其他任何地方使用它。也许您打算先在set_上执行分层步骤,然后才将结果交叉连接到group?很难知道。 -
为什么不简单地
SELECT * FROM set_ CROSS JOIN group_?不清楚你想通过“所有可能的组合”得到什么 -
注意函数GROUP_ID。您想获取表
group_的GROUP_ID函数 还是列?此外,CONNECT BYPRIOR set_id < set_id看起来至少“非常罕见”。
标签: sql oracle combinations hierarchical