查询SQL Microsoft Access错误?

时间:2015-11-19 11:11:52

标签: sql ms-access

我一直在使用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]));

跑完后,结果是对的。这是否应该发生?如果是这样,为什么?

谢谢!

1 个答案:

答案 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%。 ; - )