2011-07-31 4 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 

このクエリが正常に動作します。私は、「販売」テーブルから来ている別の列の売上を追加したいと思います。改訂されたクエリは次のとおりです。 -

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で、バッククォートでエスケープする必要があります。