2011-07-31 37 views
2

我在下面的查询工作: -MySQL查询问题 - 生成重新排序报告

SELECT group,item,buffer,stock,(stock-buffer) AS shortexcess 
FROM stkmain, stkbalance, stkbuffer 
WHERE stkmain.item = stkbalance.item 
AND stkmain.item = stkbuffer.item 

此查询工作正常。我想添加另一个来自'sale'表的销售额。修改后的查询是: -

SELECT group,item,buffer,stock,(stock-buffer) AS shortexcess, quantity 
FROM stkmain, stkbalance, stkbuffer, sale 
WHERE stkmain.item = stkbalance.item 
AND stkmain.item = stkbuffer.item 
AND stkmain.item = sale.item 

与此查询的问题是,它表明只有那些出现在销售表,而不是stkmain表中的所有行的行。 请告诉我该如何纠正这个问题。

回答

4

在sktmain上使用Left Join获取sktmain的所有行。

SELECT group,item,buffer,stock,(stock-buffer) AS shortexcess, quantity 
FROM stkmain 
LEFT OUTER JOIN stkbalance ON stkmain.item = stkbalance.item 
... 
+0

@cularisthanks。现在显示的总行数也超过了总数。可能是因为销售表包含多个项目。我如何获得特定商品的总销售额,以便查询显示不同的商品。其概念是生成一份重新排序报告,其中包含库存中的物料数量,缓冲液数量和这些特定物料的销售量,如果有任何 – mmdel

+1

得到的话。只是将数量改为总和(数量),然后逐个添加并正确地加入。多谢你们 – mmdel

1
SELECT `group`, item,buffer, stock, stock-buffer AS shortexcess 
FROM stkmain 
JOIN stkbalance ON skmain.item = stkbalance.item 
JOIN stkbuffer ON stkmain.item = stkbuffer.item 
OUTER JOIN sale ON stkmain.item = sale.item 

集团是一家reserved keyword,应由反引号进行转义。