0

主キーを持たないテーブルが 2 つあります。これら 2 つのテーブルの行数は同じです。table1 からいくつかの列を取得し、table2 からいくつかの列を取得して新しいテーブルを作成したいと考えています。table1 の最初の行と table2 の最初の行を結合したいと考えています。以下は例です

表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と、行番号が常に同じ方法で計算されるため、結果の結合はより安定します (これは場合とは異なり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 に答える