Oracle——分层查询的解释

问题描述

我有一个关于分层 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。 问题是 - 为什么它们会出现?

解决方法

您正在执行 UNION ALL。实际上,您是从 group_ 中选择所有内容,然后在加入 set_ 表后再次选择它。

更改为 UNION,重复项将被删除。

见:http://sqlfiddle.com/#!4/7d079/3