2016-07-25 36 views
3

この2つのクエリの各prod_idの結果を差し引いてみたい。2つのクエリをMySQLの複数の行で引く方法

SELECT prod_id, prod_name, SUM(quantity) 
FROM purchasesdetails 
LEFT JOIN products ON (products._id=purchasesdetails.prod_id) 
GROUP BY prod_id 

マイナス

SELECT prod_id, prod_name, SUM(quantity) 
FROM notedetails 
LEFT JOIN products 
ON(notedetails.prod_id=products._id) 
GROUP BY prod_id 

だから、最終的な結果はPROD_NAMEは、製品テーブルにある

|prod_name|SUM1-SUM2| 

です。

これは最初のクエリ

prod_id | prod_name | SUM(quantity) 
176  | ANTIPIRINA | 21 
177  | BOMBAY  | 22 

これの出力は、2番目のクエリ

prod_id | prod_name | SUM(quantity) 
176  | ANTIPIRINA | 10 
177  | BOMBAY  | 15 

の出力である。この目的の出力

prod_id | prod_name | sum1-sum2 
176  | ANTIPIRINA | 11 
177  | BOMBAY  | 7 

感謝です!

+0

いくつかのサンプルデータを表示し、希望の結果をお願いします。 – Blank

+0

各行(製品)ごとに操作したい – Padiller

答えて

3
SELECT prod_id, prod_name, SUM(quantity) 
FROM purchasesdetails 
LEFT JOIN products ON (products._id=purchasesdetails.prod_id) 
GROUP BY prod_id where prod_in not in SELECT prod_id 
FROM notedetails 
LEFT JOIN products 
ON(notedetails.prod_id=products._id) 
GROUP BY prod_id 

Uはnot in節を使用できます。この2つのサブクエリの場合

+0

各行(製品)に対して操作を行いたい – Padiller

+0

この操作は、求めていることを実行します。つまり、2つのテーブルでprod_idが一致する各行で計算が実行されます。 –

0

、あなたはこのようにそれを行うことができます。あなたのテーブルproductsがメインテーブルである場合

SELECT 
    T1.prod_id, T1.prod_name, SUM(T1.quantity) AS `sum1-sum2` 
FROM (
    SELECT prod_id, prod_name, SUM(quantity) AS quantity 
    FROM purchasesdetails 
    LEFT JOIN products ON (products._id=purchasesdetails.prod_id) 
    GROUP BY prod_id 
    UNION 
    SELECT prod_id, prod_name, 0 - SUM(quantity) AS quantity 
    FROM notedetails 
    LEFT JOIN products 
    ON(notedetails.prod_id=products._id) 
    GROUP BY prod_id 
) T1 
GROUP BY T1.prod_id, T1.prod_name 

、あなたも、このようにそれを行うことができます。

SELECT n.prod_id, n.prod_name, SUM(p.quantity - n.quantity) AS quantity 
FROM products 
LEFT JOIN notedetails n 
ON products._id = n.prod_id 
LEFT JOIN purchasesdetails p 
ON p.prod_id = products._id 
GROUP BY products._id 
+0

これはうまくいった!ありがとう。 – Padiller

関連する問題