Postgresql

一張表的多列依賴於一張表

  • April 21, 2016

我正在使用 PostgreSQL 9.2 並在 2 個表之間具有以下關係:

在此處輸入圖像描述

該表town儲存城鎮程式碼列表。該表perimeter儲存周長面額。城鎮幾乎總是包含在相同的廢水和飲用水範圍內。但是有一些可以包含在與飲用水不同的廢水周界中。

town

t_code  | t_waste_water | t_drinking_water
--------+---------------+------------------
001    | 01            | 01
002    | 02            | 02
003    | 01            | 03
004    | 02            | 02
005    | 01            | 01

perimeter

perim_code | perim_name
-----------+------------
01        | North
02        | West
03        | East

例如,城鎮003包括在廢水的北部邊界和飲用水的東部邊界。對於廢水或飲用水問題具有相同名稱的周界,我將它們放在一個中央表中,而不是將資訊複製到一個廢水錶和一個飲用水錶中。

現在,我想在一個表中獲取周界名稱和城鎮程式碼,如下所示:

town    | perim_waste_water | perim_drinking_water
--------+-------------------+------------------
001    | North             | North
002    | West              | West
003    | North             | East

我的問題是我看不到如何顯示多個周邊名稱,因為我可以在兩個表之間指定一個關係 (JOIN)。以下查詢沒有用,但只是一個開始……

SELECT 
 a.t_code,
 a.t_waste_water,
 a.t_drinking_water,
 b.perim_name AS waste_water_perim,
 b.perim_name AS drinking_water_perim

FROM schema.town a
 LEFT JOIN schema.perimeter b ON a.t_waste_water = b.perim_code AND a.t_drinking_water = b.perim_code;

查詢中是否有解決方案,還是我必須在數據庫中以不同的方式構造數據?

我不得不在這裡使用兩個 JOIN,但我認為這會起作用。您可以多次加入同一張桌子

SELECT 
 a.t_code,
 a.t_waste_water,
 a.t_drinking_water,
 b.perim_name AS waste_water_perim,
 c.perim_name AS drinking_water_perim

FROM schema.town a
 JOIN schema.perimeter b ON a.t_waste_water = b.perim_code 
 JOIN schema.perimeter c ON a.t_drinking_water = c.perim_code;

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