繁体   English   中英

查询SQL Microsoft Access错误?

[英]Query SQL Microsoft Access bug?

我一直在使用SQL访问数据库。 我正在尝试执行以下查询:

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]));

运行后,结果是正确的。 这应该发生吗? 如果是这样,为什么?

谢谢!

您的Fornecedores表可能有10条记录。

FROM Consumos, Produtos, Fornecedores 
WHERE Consumos.codproduto=Produtos.produto 

正在使用Consumos-Produtos的笛卡尔积乘以这10条记录,因此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%的可能性就是该错误存在于查询中。 ;-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM