我有此表:mysql - 用外键搜索多个表-LMLPHP

我需要从当年出售的表“ produtos”中获取“ nome”(从vendas-> data列)。我该如何关联那些表?我知道我必须使用外键...

最佳答案

不需要外键约束。

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

您是否可以编写查询来返回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 ...
               )


还有其他查询模式将返回等效结果。

关于mysql - 用外键搜索多个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42822910/

10-11 03:06