如何将表格转换为PostgreSQL列

时间:2017-03-28 17:27:59

标签: postgresql

这可能是一个愚蠢的问题,因为我是postgreSQL的初学者,但我想做的是

我有一个名为Products的产品和内部产品有3列名称,价格,到期日。现在我有一个名为order 4 row的第二个表。产品,购买价格,金额和国家已收到。

我想要的只是将Product列引用到product表中,以便它具有product表的所有信息?

这可以吗?

2 个答案:

答案 0 :(得分: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

我在这里使用过"内部联接&#34 ;;还有"左外连接"和#34;右外连接",当只有一侧的某些行符合条件时,可以使用它。我建议你找一个教程,比我在一个段落中更好地解释它们。

答案 1 :(得分:0)

假设name列是Products表中的键,Orders表中的product列引用它,您可以在相关列上加入两个表并获取所有信息:

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