Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle中处理循环数据';s SQL_Sql_Oracle_Model - Fatal编程技术网

在Oracle中处理循环数据';s SQL

在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栏 --------- -

有一个问题不知道如何只用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方面的努力也在抱怨“循环数据”。这一点一开始看起来并不难做到,但不知道如何以非程序的方式做到。有什么想法吗


提前谢谢。

首先,我要检查您的数据。您提供的示例数据看起来不是圆形的,连接方式不应出错

如果您的数据如下所示,则会出现以下错误:

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