2011-06-29 32 views
3

2つのカラム(user_idとyear)を持つ2つのテーブルがあります。Oracle指定のカラム名

Query1を:

SELECT * FROM table_1 t1 
FULL JOIN table_2 t2 ON t1.user_id=t2.user_id AND t1.year=t2.year 

生成し、次の列名:

user_id, year, user_id_1, year_1 

QUERY2:

QCSJ_C000000000400000, QCSJ_C000000000400002, QCSJ_C000000000400001, QCSJ_C000000000400003 

CREATE TABLE table_copy AS SELECT * FROM 
(SELECT * FROM table_1 t1 
FULL JOIN table_2 t2 ON t1.user_id=t2.user_id AND t1.year=t2.year); 

は漠然と列名を次生成し

query2に明示的に書き込むことなくquery1と同じ名前を使用するように強制する短い方法はありますか(列が多い場合は重要です)。たぶんいくつかのOracleの設定ですか?

+6

常に列を明示する必要があります。そうしないと説得力のある理由はありません。 – skaffman

+0

いずれかのテーブルの* only * 1のuser_idカラムとyearカラムを含むクエリを記述して、余分なデータ(余分なカラムのため)がデスティネーションテーブルに書き込まれるのを避けることができます。 – shahkalpesh

+0

私の意図は、すべての結合を行い、手動で列を複製することを減らすことでした。既存のテーブルに列を追加または削除するときに発生する行の連鎖や他の物理的パラメータにどのように影響するかはわかりませんが – reforrer

答えて

5

列をリストし、ASを使用して列名を指定します。

CREATE TABLE table_copy AS 
SELECT t1.user_id AS t1_user_id, 
     t1.year AS t1_year, 
     t2.user_id AS t2_user_id, 
     t2.year AS t2_year 
FROM table_1 t1 
FULL JOIN table_2 t2 ON t1.user_id=t2.user_id 
AND t1.year=t2.year; 
0

私は完全にあなたの予想される部分を理解していますが、これだけでは、テーブルを作成するために、次のクエリを使用することができるようなものであれば私が理解することはあなただけ

のtable_1からかtable_2からすべての列を望んでいませんでした。 。

CREATE TABLE table_copy AS SELECT * FROM 
    (SELECT t1.* FROM table_1 t1 FULL JOIN table_2 t2 
     ON t1.user_id=t2.user_id 
     AND t1.year=t2.year); 

か、SQLで両方のテーブルの列をしたいが、別の名前であれば、あなたは唯一のcagcowboyによって提案されたクエリに従わなければならない....

ただし、plsqlに "t1_"のような接頭辞を持つ表を作成することはできません。

+0

両方のテーブルのすべての列が必要です。 user_idとyearのような外部キー列は両方のテーブルを結合するので同じであるため、user_idとyearを重複した列として選択リストに2回表示したくありません。トピックのポイントは、SELECT *構文を使用するときにquery2でquery1列名を使用できるかどうかを調べることでした。それは可能ではないようだと私は以前に行われたようにPLSQLの連結リストリストを連結する必要があります。 – reforrer

関連する問題