簡體   English   中英

從兩個不同的表中減去

[英]subtract from two different table

我有3個表“產品列表,銷售,退貨”表,因此,例如,我有3個銷售和2個退貨,如下所示。

這是產品列表中的數據

id | pcode | pname | pdesc | 
 1 |  222  | 33uf  | 10v   | 

這是來自銷售的ff數據

id | pcode | total | profit
 1 |  222  |  200  |  10
 2 |  222  |  100  |  10
 3 |  222  |  200  |  10

這是返回的ff數據

id | pcode | total | lose
 3 |  222  |  200  |  10
 4 |  222  |  100  |  10

我的問題是這個 我想選擇產品列表數據, 總結銷售“總”和“利”的價值,總結了“總”,並從返回“丟失”的價值。 然后減去我的兩個表以獲得結果。 預期結果必須是這樣的。

id | pcode | pname | pdesc | total | profit |
 1 |  222  | 33uf  | 10v   | 200   |  10    |

我有這個ff代碼,但是我不能從銷售中減去“總計”,從收益中減去“總計”,從銷售中減去“利潤”,從收益中減去“虧損”。

$result = mysql_query("SELECT 
    productlist.*, 
    SUM(sales.total)-SUM(return.total) as total, 
    SUM(sales.profit)-SUM(return.lose) as profit

FROM productlist
LEFT JOIN sales ON sales.pcode = productlist.pcode AND return ON return.pcode = productlist.pcode
GROUP BY pcode
    ORDER BY total ASC");

您似乎正在嘗試使用AND將兩個表連接起來,這不太正確;)

嘗試這個:

...
LEFT JOIN `sales` USING (`pcode`)
LEFT JOIN `return` USING (`pcode`)
...

我不確定這是否可行,它可能會抱怨column `pcode` is ambiguous 如果發生這種情況,請嘗試以下方法:

...
LEFT JOIN `sales` ON `sales`.`pcode` = `productlist`.`pcode`
LEFT JOIN `return` ON `return`.`pcode` = `productlist`.`pcode`
...

您的查詢結構不會返回正確的結果。 無論您如何固定語法,都將在給定產品的銷售和退貨之間獲得笛卡爾產品。

一種解決方法是在聯接之前進行聚合:

SELECT pl.*,
       (coalesce(s.total, 0) - coalesce(r.total, 0)) as total,
       (coalesce(s.profit, 0) - coalesce(r.lose, 0)) as profit
FROM productlist pl left join
     (select pcode, sum(total) as total, sum(profit) as profit
      from sales
      group by pcode
     )
     on s.pcode = pl.pcode left join
     (select pcode, sum(total) as total
      from return
      group by pcode
     ) r
     on r.pcode = pl.pcode
ORDER BY total ASC;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM