在Oracle中处理循环数据';s SQL
有一个问题不知道如何只用SQL来解决(我可以用PL/SQL来解决,但应该只用SQL来解决) 我有一个表(实际上它不是一个表,而是with查询的结果),其中包含一对值,如下所示: column1 column2 --------- --------- value1 value2 value1 value3 value2 value4 value3 value7 value8 value9 第1栏第2栏 --------- --------- 价值1价值2 价值1价值3 价值2价值4 价值3价值7 价值8价值9 我希望该数据的输出是(我不关心顺序): 输出列 --------------- 值1、值2、值3、值4、值7 价值8,价值9 换句话说,我想得到由两个值中的任何一个连接的不相交的数据集 输入表中的每一对都是唯一的(次值总是在左边,我使用了distinct来计算输入表) 我完全不知道如何使用该模型来实现这一点,而我在connect方面的努力也在抱怨“循环数据”。这一点一开始看起来并不难做到,但不知道如何以非程序的方式做到。有什么想法吗在Oracle中处理循环数据';s SQL,sql,oracle,model,Sql,Oracle,Model,有一个问题不知道如何只用SQL来解决(我可以用PL/SQL来解决,但应该只用SQL来解决) 我有一个表(实际上它不是一个表,而是with查询的结果),其中包含一对值,如下所示: column1 column2 --------- --------- value1 value2 value1 value3 value2 value4 value3 value7 value8 value9 第1栏第2栏 --------- -
提前谢谢。首先,我要检查您的数据。您提供的示例数据看起来不是圆形的,连接方式不应出错 如果您的数据如下所示,则会出现以下错误:
column1 column2
--------- ---------
value1 value2
value1 value3
value2 value4
value3 value7
**value7 value1**
value8 value9
在Oracle 10g中,即使存在CONNECT BY循环,您也可以指定Oracle返回行。以下查询将适用于您的数据集:
SQL> SELECT root || ',' || stragg(DISTINCT column2)
2 FROM (SELECT CONNECT_BY_ROOT(column1) root, t.*
3 FROM t
4 CONNECT BY PRIOR column2 = column1
5 START WITH column1 IN (SELECT column1
6 FROM t
7 WHERE column1 NOT IN (SELECT column2
8 FROM t))) v
9 GROUP BY root;
ROOT||','||STRAGG(DISTINCTCOLU
-----------------------------------------
value1,value2,value3,value4,value7
value8,value9
我正在使用函数。你完全正确。我忘了显示数据是如何循环的。正如SeriousCallers所指出的,我没有显示数据是如何循环的。我在connectby中添加了一个nocycle,查询似乎运行良好。非常感谢文森特。我学到了很多。
SQL> SELECT root || ',' || stragg(DISTINCT column2)
2 FROM (SELECT CONNECT_BY_ROOT(column1) root, t.*
3 FROM t
4 CONNECT BY PRIOR column2 = column1
5 START WITH column1 IN (SELECT column1
6 FROM t
7 WHERE column1 NOT IN (SELECT column2
8 FROM t))) v
9 GROUP BY root;
ROOT||','||STRAGG(DISTINCTCOLU
-----------------------------------------
value1,value2,value3,value4,value7
value8,value9