我一直在使用SQL开发Access数据库。我试图执行以下查询:
SELECT Produtos.produto,
[aux].[total]/[Produtos].[existencias] AS [peso consumos nas existencias]
FROM (SELECT Produtos.produto, SUM(Consumos.quantidade) AS total
FROM Consumos, Produtos, Fornecedores
WHERE Consumos.codproduto=Produtos.produto
AND Produtos.codfornecedor=9
GROUP BY Produtos.produto
ORDER BY Produtos.produto) AS aux
INNER JOIN Produtos
ON aux.produto = Produtos.produto
WHERE (((aux.produto)=[Produtos].[produto]));
仔细观察结果会发现我的列[peso consumos nas existencias]乘以10.在尝试修复此问题后,我注意到我没有使用表Fornecedores,尽管我在FROM关键字后调用它,所以我删除了它:
SELECT Produtos.produto,
[aux].[total]/[Produtos].[existencias] AS [peso consumos nas existencias]
FROM (SELECT Produtos.produto, SUM(Consumos.quantidade) AS total
FROM Consumos, Produtos
WHERE Consumos.codproduto=Produtos.produto
AND Produtos.codfornecedor=9
GROUP BY Produtos.produto
ORDER BY Produtos.produto) AS aux
INNER JOIN Produtos
ON aux.produto = Produtos.produto
WHERE (((aux.produto)=[Produtos].[produto]));
跑完后,结果是对的。这是否应该发生?如果是这样,为什么?
谢谢!
答案 0 :(得分:0)
您的Fornecedores
表可能有10条记录。
FROM Consumos, Produtos, Fornecedores
WHERE Consumos.codproduto=Produtos.produto
正在使用这些10条记录进行Consumos-Produtos加入的笛卡尔积,因此SUM()使用了每个数字10次。
注1:
使用显式INNER JOIN语法被认为是更好的样式:
FROM Consumos INNER JOIN Produtos
ON Consumos.codproduto=Produtos.produto
WHERE Produtos.codfornecedor=9
而不是FROM Consumos, Produtos
注2:
如果您认为在Access(或任何数据库)查询引擎中发现了错误,那么查询中的错误几乎可能是100%。 ; - )