Postgresql
CREATE VIEW 作為具有相同名稱列的表之間的連接
正如標題所說,我想從表之間的連接創建一個視圖,這些表具有相同名稱的列(令人驚訝的是“
id
”)。Postgres 不會將表名添加到結果中,但由於某種原因,查詢工作正常,返回多個具有相同名稱和不同數據的列。
CREATE TABLE
但是,它的寬容度較低,並且返回:ERROR: column "id" specified more than once
其他人建議
SELECT
使用不同名稱的列(例如here),但兩個表都有很多列。我是否需要以某種方式自動重命名/刪除
id
列(例如這種方式),還是有更好的方法?
我對您提到的問題的回答中有一個錯誤。在此過程中,我改進了其他一些細節:
如果您有很多列和/或重複使用,我會使用那裡概述的動態 SQL。
如果您一直使用正確的命名約定,則可以避免大多數情況。永遠不要
id
用作列名,因為您只是在尋找困難的方式,所以它太模棱兩可了。我會改用tbl_id
“tbl”作為表名。不幸的是,一些 ORM 使用這種反模式。
而且你不會得到任何普通的異常,
SELECT
因為 Postgres 不需要普通的列名SELECT
(儘管它的用處僅限於臨時查詢)。但是,表或視圖的列需要不同的名稱 - 即使是子查詢中的派生表。手冊:就像在表中一樣,a 的每個輸出列
SELECT
都有一個名稱。簡單SELECT
來說,這個名字只是用來標記列顯示,但是當它SELECT
是一個更大查詢的子查詢時,這個名字被更大的查詢看成是子查詢產生的虛擬表的列名.Postgres 不需要不同的標籤。但是實際的列名必須是不同的以避免歧義。