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
子句中)是危险的——很容易出错。我建议您使用显式联接重写查询,答案可能很明显。