/ / mysql wybierz różnicę (minus) - mysql, sum, odejmij

mysql select difference (minus) - mysql, suma, odejmij

Mam dwie tabele:

tabela 1: stan magazynowy

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

tabela 2: sprzedaż

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

Jak uzyskać różnicę między zapasami (sumajedna pozycja) - całkowita sprzedaż (suma) produktu? Próbowałem obliczyć różnicę między dwiema sumami, ale czasami odejmuję „nic” od zapasów, ponieważ może produkt nie jest obecny w tabeli sprzedaży i otrzymuję coś takiego:

2 - NULL = NULL i chcę coś takiego jak 2-0 = 2

Odpowiedzi:

4 dla odpowiedzi № 1

IFNULL przyda się tutaj:

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

Zastępuje wartości NULL odpowiednimi wartościami, tutaj wynosi 0.


7 dla odpowiedzi nr 2

MySQL nie realizuje operacji MINUS - co jest niefortunne, ponieważ w niektórych przypadkach może umożliwić lepsze wykonanie planów niż alternatywy:

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

lub...

SELECT a.*
FROM a
WHERE a.id NOT IN (
SELECT b.id
FROM b
)

1 dla odpowiedzi nr 3
sum(ifnull(item,0)) - sum(ifnull(product,0))