使用外键

时间:2017-03-15 23:54:30

标签: mysql foreign-keys

我有这些表:enter image description here

我需要得到" nome"从表格" produtos"在今年出售的(来自vendas - >数据栏)。我该如何将表格与那些表格联系起来?我知道我必须使用foreigns键......

1 个答案:

答案 0 :(得分:0)

不需要外键约束。

关系数据库通过在列中存储公共值来建立行之间的“关系”。

您是否可以编写一个返回vendas中代表“当年销售”的行的查询?

SELECT v.id
  FROM `vendas` v
 WHERE ...

然后你可以写一个返回同一个集的查询,以及来自produtos_vendidos的匹配行吗?

SELECT v.id
     , pv.id_venda
     , pv.id_produto
  FROM `vendas` v
  JOIN `produtos_vendidos` pv
    ON pv.id_venda = v.id
 WHERE ...

完成后,您可以将加入添加到produtos

SELECT v.id
     , p.*
  FROM `vendas` v
  JOIN `produtos_vendidos` pv
    ON pv.id_venda = v.id
  JOIN `produtos` p
    ON p.id = pv.id_produtos
 WHERE ...

这很可能会从produtos返回多个行副本。

为了消除这些重复,我们可以使用GROUP BY子句,或者我们可以重写查询。

一种可能的方法是使用带有相关子查询的EXISTS谓词。作为可能的样子的一个例子:

 SELECT p.*
   FROM `produtos` p
  WHERE EXISTS ( SELECT 1 
                   FROM `vendas` v
                   JOIN `produtos_vendidos` pv
                     ON pv.id_venda = v.id
                  WHERE pv.id_produtos = p.id
                    AND ...
               )

还有其他查询模式会返回相同的结果。