我需要得到" nome"从表格" produtos"在今年出售的(来自vendas - >数据栏)。我该如何将表格与那些表格联系起来?我知道我必须使用foreigns键......
答案 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 ...
)
还有其他查询模式会返回相同的结果。