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 № 1IFNULL
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))