0

我有 2 个没有主键的表。这 2 个表具有相同的行数。我想通过从表 1 中获取一些列和从表 2 中获取一些列来创建一个新表。我想将表 1 的第一行和表 2 的第一行组合起来。下面是例子

表格1

ACOL1 ACOL2 ACOL3
A1 A2 A3
B1 B2 B3
C1 C2 C3

表2

BCOL1 BCOL2 BCOL3
11 12 13
21 22 23
31 32 33

组合表

ACOL1 BCOL2 BCOL3
A1 12 13
B1 22 23
C1 32 33

我尝试了以下查询,但没有运气。它给出以下错误:
查询:

create table COMBINED_TABLE 
AS 
select a.ACOL1, b.BCOL2, b.BCOL3 
from (select ACOL1,rownum from TABLE1) a, 
     (select BCOL2, BCOL3, rownum from TABLE2) b 
WHERE a.rownum = b.rownum

错误: ORA-01747:“无效的 user.table.column、table.column 或列规范”

4

3 回答 3

1
create table combined_table
as
select a.acol1, b.bcol2, b.bcol3
from (
  select acol1, row_number() over (order by acol1) as rn
  from table1
) a 
  join (
    select bcol2, bcol3, row_number() over (order by bcol1) as rn
    from table2
  ) b on a.rn = b.rn

使用row_number()rownum您实际定义“最后”或“第一”行的含义更强大(除非定义了某些顺序,否则这些术语没有意义)。

当您order by在窗口函数中定义 an 时,生成的连接更加稳定,因为行号总是以相同的方式计算(这不是的情况rownum)。

于 2013-10-31T22:39:25.300 回答
0

您不能rownum用作列名,给它一个别名可以解决问题

create table COMBINED_TABLE 
AS 
select a.ACOL1, b.BCOL2, b.BCOL3 
from (select ACOL1,rownum rn from TABLE1) a, 
     (select BCOL2, BCOL3, rownum rn from TABLE2) b 
WHERE a.rn = b.rn
于 2013-10-31T22:40:20.720 回答
0

尝试这个:

CREATE TABLE table1a (
  acol1 NUMBER,
  acol2 NUMBER,
  acol3 NUMBER
);

CREATE TABLE table2a (
  bcol1 NUMBER,
  bcol2 NUMBER,
  bcol3 NUMBER
);

INSERT INTO table1a VALUES (1, 2, 3);
INSERT INTO table1a VALUES (4, 5, 6);

INSERT INTO table2a VALUES (10, 20, 30);
INSERT INTO table2a VALUES (40, 50, 60);

CREATE TABLE combined_table (ct1, ct2, ct3) AS
  SELECT a.acol1, b.bcol2, b.bcol3
    FROM
      (SELECT a.*, rownum AS rn FROM table1a a) a,
      (SELECT b.*, rownum AS rn FROM table2a b) b
  WHERE a.rn = b.rn
;
于 2013-10-31T22:41:28.760 回答