SQL使用rownum选择连续行

时间:2016-10-20 03:14:47

标签: sql oracle select insert rownum

尝试通过脚本创建一些测试数据,使用TableB中尚不存在的ID填充TableA.colVal。

最终结果是看到TableA.colVal的所有内容最终填充到TableB.ID_PK中:

INSERT INTO tableA (colVal , aPK2, aPK3) VALUES
(
  (SELECT colVal , aPK2, aPK3
    FROM tableA
    WHERE colVal   NOT IN   
    (   
       SELECT bID_PK
        FROM (SELECT bID_PK, rownum r
           FROM (SELECT bID_PK
                  FROM TableB order by bID_PK DESC)
            )
         where r = 1  -- 
       )
     and rownum = 1)
  );

所以如果     TableA有colVals 1,2,5,6,7,8 和
    TableB有bID_PKs 1,5,7

具体而言我想确定'缺失'3     TableB.bID_PK值:2,6和8

我尝试增加r = 1,希望得到下一个值来填充,但我总是得到TableB中找不到的第一个TableA.colVal(所以我所有的TableA.colVal都得到了相同的值)。更改外部选择的rownum也不起作用。

帮助?

澄清 我需要使用TableA.colVal中不存在的TableB.bID_PK值填充TableA.colVal,其中TableA具有3字段复合主键。我可以手动更改剩余PK字段的值,但我需要使用TableB.bID_PK(这是​​TableB的主键)中的值填充剩余字段。

2 个答案:

答案 0 :(得分:1)

您想要的select看起来像:

select b.id
from b
where not exists (select 1 from a where a.aid = b.bid);

您可以使用insert插入现有表格,也可以使用适合您数据库的语法创建新表格。

答案 1 :(得分:1)

除了以外可能是一个很好的用例:

INSERT INTO TableA ({Primary Key Columns})
SELECT {Primary Key Columns} FROM TableB
EXCEPT
SELECT {Primary Key Columns} FROM TableA