Postgresql

CREATE VIEW 作為具有相同名稱列的表之間的連接

  • November 8, 2016

正如標題所說,我想從表之間的連接創建一個視圖,這些表具有相同名稱的列(令人驚訝的是“ 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 不需要不同的標籤。但是實際的列名必須是不同的以避免歧義。

引用自:https://dba.stackexchange.com/questions/154402