2017-03-28 48 views
0

這可能是一個愚蠢的問題,因爲我在PostgreSQL初學者,但我想要做的是如何將表結轉成列的PostgreSQL

我有一個表稱爲產品和產品內部有3欄名稱,價格,到期日。現在我有了一個叫做4列的第二張表。產品,purchasePrice,金額和CountryRecieved。

我要的只是將產品列引用到產品表中,以便它具有產品表的所有信息?

這能行嗎?

回答

1

的關鍵您需要在閱讀了概念:

  • 「正常化」:從一個數據庫表指針到另一個
  • :數據分解成多個相關實體
  • 「外鍵」的過程
  • 「連接」:

    • 已正確決定,從產品的信息不應該僅僅被複制:用於跟蹤該指針和數據一起回來

    在你的情況下,查詢構造手動分配到Orders表的每一行。這是規範化最基本的方面之一:每個數據塊都在一個地方,因此更新不會使其不一致。

  • 你已經推斷Orders表需要某種Product列;這是你的外鍵。表示這種情況的最常見方法是爲Products表提供一個唯一標識每行的ID列,然後在Orders表中有一個ProductID列。您也可以使用產品名稱作爲關鍵字,但這意味着您不能重命名產品,因爲數據庫中的其他實體可能會引用它;整數鍵在存儲和速度方面通常也會更高效。
  • 要使用該外鍵關係,請在SQL查詢中使用JOIN。例如,要獲取名稱和有序的產品數量,你可以寫:
SELECT 
    P.Name, 
    O.Amount 
FROM 
    Products as P 
INNER JOIN 
    Orders as O 
    -- This "ON" clause tells the database how to look up the foreign key 
    On O.ProductId = P.ProductId 
ORDER BY 
    P.Name 

在這裏,我使用的「內部連接」;還有「左外連接」和「右外連接」,當一邊只有一些行滿足條件時可以使用。我建議你找到一個教程來解釋它們,比我在一個段落中可以做得更好。

0

假設名字列在產品表和訂單表指的是它的產品列鍵,你可以加入對相關欄(S)這兩個表,並得到所有的信息:

select 
    o.*, p.* 
from orders o 
join products p on o.product = p.name;