2014-03-13 42 views
1

我有兩個表:MySQL的選擇差(減)

表1:股票

uid|item| 
-------- 
01 |value1 
02 |value2 
02 |value2 
etc|etc 

表2:銷售

uid|item 
-------- 
02|value2 
02|value2 
02|value2 

如何獲得股票之間的差(和一項產品的總銷售額(總和)?我試圖計算兩個總和之間的差額,但有時我從庫存中減去「無」,因爲可能某個項目不在銷售表中,並且我得到如下所示的內容:

2 - NULL = NULL我想要一些東西像2-0 = 2

回答

4

IFNULL都會來這裏派上用場:

SELECT t1.uid, SUM(t1.item) - IFNULL(SUM(t2.item), 0) 
FROM table1 t1 LEFT JOIN table2 t2 ON t1.uid = t2.uid 
GROUP BY t1.uid 

它取代NULL的適當的值,這是0

7

MySQL未實施一個減法運算 - 這是不幸的,因爲它可以允許在某些情況下比其它更好的執行計劃:

SELECT a.* 
FROM a 
LEFT JOIN b 
ON a.id=b.id 
WHERE b.id IS NULL 

或...

SELECT a.* 
FROM a 
WHERE a.id NOT IN (
SELECT b.id 
FROM b 
) 
1
sum(ifnull(item,0)) - sum(ifnull(product,0))