2011-06-29 35 views
3

我有2個表(2列(user_id和year))。Oracle給出了列名

查詢1:

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:

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); 

主要生產以下含糊列名:

QCSJ_C000000000400000, QCSJ_C000000000400002, QCSJ_C000000000400001, QCSJ_C000000000400003 

有沒有一種簡短的方法來強制Oracle query2使用與query1相同的名稱,而無需明確寫入(在有許多列時這很重要)?也許一些Oracle設置?

+6

您應該始終明確指出您的列。沒有令人信服的理由不會。 – skaffman

+0

您可以編寫一個查詢,該查詢將包含每個表的* only * 1中的user_id列和年份列,以避免額外的數據(由於多列)在目標表中填充。 – 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在選擇列表中出現兩次作爲重複的列。這個話題的要點只是要弄清楚在使用SELECT *語法時是否可以在query2中使用query1列名。看來這是不可能的,我需要像以前那樣使用PLSQL連接的選擇列表字符串。 – reforrer