SQL一对一没有关系

时间:2011-10-11 19:53:03

标签: sql oracle subquery

使用Oracle 11
我想从表中提取数据,并添加一列来自子查询语句的计算值。

示例表1是:

COLUMN1:   COLUMN2:
1          Group1
3          Group2
5          Group3
6          Group4

每次运行查询时,子查询都返回不同的值,但是为了这个例子,我们假设它返回值:

2
4
7
8

我需要的是结合结果

COLUMN1:   COLUMN2:    COLUMN3: (subquery - order does NOT matter)
1          Group1      2
3          Group2      4
5          Group3      7
6          Group4      8

但是因为子查询是从表中返回的每一行计算的,所以我得到的只是。

COLUMN1:   COLUMN2:    COLUMN3: 
1          Group1      2
3          Group2      2
5          Group3      2
6          Group4      2

我无法想到关联表和子查询,我尝试过使用ROWNUM但没有运气。

更新

SELECT GD.*, N
  FROM patrongroupsdesc GD,
       (SELECT n
          FROM patrongroupsdesc GD2,
               (SELECT n, ROWNUM
                  FROM (    SELECT ROWNUM n
                              FROM DUAL
                        CONNECT BY LEVEL <= 100)
                 WHERE n >= 1) SUB
         WHERE SUB.n = GD2.groupid(+) AND GD2.groupid IS NULL) SUB2

表PATRONGROUPSDESC的格式如下

groupid (NUMBER)
description (VARCHAR2)
...other data

SUB返回值1-100
SUB2返回groupid数字中的间隙
我基本上复制了这个表中的所有数据,除了一列

1 个答案:

答案 0 :(得分:0)

首先,您必须知道,如果您没有ORDER BY条款,则结果的顺序会带有完全不保证

然后,你可以这样做:

WITH first_table AS (select *, ROWNUM AS rn FROM ...)
   , secnd_table AS (select *, ROWNUM AS rn FROM ...)
SELECT first_table.*, secnd_table.*
  FROM first_table INNER JOIN secnd_table USING (rn)

这里的技巧是ROWNUM被分配为SELECT语句的结果。因此,如果要粘贴这样的表,则必须从表中选择SELECT并将rownum存储在另一列中,然后从这两个子选择中加入。