2013-10-31 36 views
0

我有2個沒有主鍵的表。這兩個表具有相同的行數。我想創建一個新表,從table1中獲取一些列,並從表2中獲取一些列。我想結合table1中的第一行和table2中的第一行。 下面是示例從Oracle中的現有表創建新表11g

TABLE1

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

TABLE2

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

COMBINED_TABLE

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,或列規格」

回答

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 
+0

非常感謝你馬克西姆,你化險爲夷。 – user168574

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產生的加入更穩定的行號總是計算方式(這是rownum的情況下)。

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 
;