MySQL和数量

MySQL和数量,mysql,sql,.net,sum,Mysql,Sql,.net,Sum,现在我有一个问题: SELECT Categoria.Descricao AS Categoria, Marca.descricao AS Marca, Modelo.descricao AS Modelo,Material.n_serie As 'Nº Série', SUM(Entrada.Qtd-COALESCE(Saida.Qtd,0)) AS QTD ,username AS 'User' FROM Marca,Modelo,Categoria,M

现在我有一个问题:

SELECT 
    Categoria.Descricao AS Categoria,
    Marca.descricao AS Marca,
    Modelo.descricao AS Modelo,Material.n_serie As 'Nº Série', 
    SUM(Entrada.Qtd-COALESCE(Saida.Qtd,0)) AS QTD ,username AS 'User' 
FROM Marca,Modelo,Categoria,Material,Users,Entrada 
    LEFT JOIN Saida ON Entrada.n_serie=Saida.n_serie 
WHERE Marca.id_marca=Modelo.id_marca 
    AND Modelo.categoria= Categoria.id_categoria 
    AND Modelo.id_modelo=Material.id_modelo 
    AND Material.n_serie=Entrada.n_serie 
    AND Entrada.user=Users.id 
GROUP BY Categoria.descricao,Marca.descricao,Modelo.descricao,Material.n_serie;
输出

 Categoria, Marca, Modelo,      Nº Série, QTD,  User
'Cabo',     'UTP', '3 metros', '1234',    '2', 'admin'
正如你所见,它告诉我我还有两条UTP电缆,而我只有一条

表格Entrada(In):

 n_serie, data_entrada, user, qtd, obs
'1234', '2014-05-12 14:37:34', '6', '50', ''
'1234', '2014-05-12 14:37:43', '6', '2', ''
 n_serie, data_saida, user, qtd, obs
'1234', '2014-05-12 14:50:16', '6', '2', ''
'1234', '2014-05-12 14:50:22', '6', '49', ''
50+2=52

赛达表(外):

 n_serie, data_entrada, user, qtd, obs
'1234', '2014-05-12 14:37:34', '6', '50', ''
'1234', '2014-05-12 14:37:43', '6', '2', ''
 n_serie, data_saida, user, qtd, obs
'1234', '2014-05-12 14:50:16', '6', '2', ''
'1234', '2014-05-12 14:50:22', '6', '49', ''
49+2=51

有人能告诉我这个问题在哪里找到另一个问题吗


提前感谢。

问题是,您将2行与2行合并,结果得到4行,然后将4行相加

(Entrada中的每一行都与Saida中的两行匹配。)

您需要做的是先聚合每个表,然后将它们连接在一起

(
  SELECT n_serie, SUM(qtd) AS qtd
    FROM Entrada
GROUP BY n_serie
)
  AS entrada
LEFT JOIN
(
  SELECT n_serie, SUM(qtd) AS qtd
    FROM Saida
GROUP BY n_serie
)
  AS Saida
    ON Saida.n_serie = Entrada.n_serie
这会给你

Entrada:         Saida:

n_serie, qtd     n_serie, qtd        a - b
'1234' , 52      '1234' , 51           1

您混合了隐式和显式
join
语法。隐式
join
语法(条件在
where
子句中)是危险的——很容易出错。我建议您使用显式联接重写查询,答案可能很明显。