我有此表:
我需要从当年出售的表“ 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/