Mysql 如何在三个表中求和

Mysql 如何在三个表中求和,mysql,Mysql,我有3个表:DefMatiere,它保存物品的名称,还有一个表component,它保存使用的数量和库存数据,它保存购买的数量及其价值 我写这个查询是为了得到物品的名称、使用和购买的数量以及支付的金额 SELECT dm.nom, SUM(IF(dm.id=ig.matid, ig.qty, 0)) AS used, SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0)) AS achete, SUM(DISTINCT IF(dm.id=sd.matid

我有3个表:DefMatiere,它保存物品的名称,还有一个表component,它保存使用的数量和库存数据,它保存购买的数量及其价值

我写这个查询是为了得到物品的名称、使用和购买的数量以及支付的金额

SELECT dm.nom, SUM(IF(dm.id=ig.matid, ig.qty, 0)) AS used,
SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0)) AS achete, 
SUM(DISTINCT IF(dm.id=sd.matid ,sd.montant*(1+(sd.tvaval/100)) ,0)) AS val, 
(SUM(DISTINCT IF(dm.id=sd.matid ,sd.quantite,0))- SUM(IF(dm.id=ig.matid, ig.qty, 0))) AS restant
FROM DefMatiere AS dm 
LEFT JOIN ingredient AS ig ON ig.matid=dm.id 
LEFT JOIN StockData AS sd on sd.matid = dm.id 
WHERE dm.type = 1 GROUP BY dm.nom
这给了我想要的,但它似乎是一个很长的烦恼罗马

是否可以使用别名进行类似于achee-val的重新启动计算

因为我想添加太多的val/achete*used val/achete*restant在本例中,我的查询变得像《指环王》6卷

还是我必须继续写我的罗马文?任何帮助都能教会我

[编辑]

然而,在输入了更多的数据后,我发现这个查询是不正确的

因为如果StockData中有多行具有相同matid,则根据行数的不同,我使用的结果是两倍或三倍

查询结果和我找到的解决方案


这就是我的决心。但我找不到合适的查询

我认为您的问题相对简单,但并没有简单到我想坐下来为您编写SQL

但是,既然你要求接受教育,我认为这很好,那么我认为从长远来看,以下是对你最有帮助的:

我认为编写SQL(以及学习编写SQL)的最佳方法不是从头开始,而是使用一个更强大的带有向导的图形化SQL工具。我使用MicrosoftAccess2003,但还有许多其他可用的SQL工具。在这样一个工具上,你可以轻松地建立你的模型,链接、查询和汇总,让你心满意足


当我在php中构建困难的查询时,我通常首先在SQL图形用户界面中对查询进行建模,然后一旦得到我想要的总数,我就保存生成的SQL并将其插入php。

您希望别名作为变量,这是不可能的。可能类似于:SELECT@used=SUM(IF(dm.id=ig.matid,ig.qty,0))从表中看,只要它执行得很快,这是唯一需要担心的事情。我尝试了别名,发现这是不可能的,我认为我必须继续写我的罗马语。不管怎样,我都会尝试米海的建议。如果能像Mihai说的那样工作,我可能会缩短剩余的计算时间,但我认为您需要使用
@used:=SUM之类的方法进行设置(如果…
我发送此问题的目的不是有人为我编写SQL,而是展示一种Mihai所做的方法。我尝试了他建议的方法,但它不起作用。我已经编写了我的roman,它起作用了。我的目标是,是否有办法缩短我的roman。仅此而已。