我正在嘗試使用CREATE Table AS SELECT語句創建表。在SELECT語句中,目前有大量表(超過10個)的連接。當使用create table作爲select時避免重複的列名稱
CREATE TABLE table_name AS
SELECT
*
FROM
table_x x
LEFT JOIN
table_y y
on x.id=y.fid
LEFT JOIN
table_z z
on x.id=z.fid
...
...
...
由於許多表共享列名(儘管不是數據),我得到一個重複的列名錯誤。
我想知道是否有一種懶惰的方式來生成列名,所以沒有衝突。例如,在上面的示例中,table_y
和table_z
都具有名爲fid
的列。
我想知道是否有產生所謂的y.id
和z.id
,或類似的東西列的方式(例如y_id
,z_id
),而不是僅僅id
並在新表id
?
我想避免編寫查詢,我必須顯式地寫出來的所有列在選擇,和我們AS
聲明如下:
CREATE TABLE table_name AS
SELECT
x.id as x_id,
y.fid as y_fid,
z.fid as z_fid,
...
...
...
FROM
table_x x
LEFT JOIN
table_y y
on x.id=y.fid
LEFT JOIN
table_z z
on x.id=z.fid
...
...
...
無論如何,最好的做法是寫出列名,因爲這樣可以防止其他查詢,函數和過程在底層表結構更改時發生中斷,並且使腳本更易於維護 - 如果新開發人員必須做出一些更改,如果在腳本中陳述了什麼,則有更好的機會知道正在被拉入什麼位置。您甚至可能會發現在新表中不需要某些列,因此您不需要選擇它們 – MarkD
本練習的一部分內容是對多個表中記錄的數據進行完整性檢查,因此對我們在每個列的前面添加每個表的標識符。我完全理解我將在用於加入的列之間重複值,但是,這不會在生產環境中使用,並且重複的內容不會成爲此用例的主要擔心。 – jonhurlock