Получить товар на складе Количество - PullRequest
1 голос
/ 13 сентября 2009

Используя sqlite3, у меня есть две таблицы: продукты, заказы. Я хочу знать, сколько товаров осталось в магазине.

SELECT pid,
       txt,
       price,
       qty-coalesce((SELECT SUM(qty) 
                       FROM ORDERS
                      WHERE pid=?),0)
  FROM PRODUCTS
 WHERE pid=?

Это работает, если я выберу 1 продукт, мне нужен список всех моих продуктов?

Ответы [ 3 ]

2 голосов
/ 13 сентября 2009
SELECT 
    P.pid, P.txt, P.price, 
        P.qty - coalesce((SELECT sum(O.qty) FROM orders O WHERE O.pid = P.pid), 0) 
FROM products P
1 голос
/ 13 сентября 2009

Попробуйте это:

SELECT
    pid,
    txt,
    price,
    qty-coalesce(
        (SELECT sum(qty)
         FROM orders
         WHERE orders.pid = products.pid),0)
FROM products
0 голосов
/ 13 сентября 2009

Я рекомендую использовать:

   SELECT t.pid,
          t.txt,
          t.price,
          t.qty - IFNULL(qs.qty_sold, 0) 'onhand_qty'
     FROM PRODUCTS t
LEFT JOIN (SELECT o.pid,
                  SUM(o.qty) 'qty_sold'
             FROM ORDERS o) qs ON qs."o.pid" = t.pid
    WHERE t.pid = ?

Хотя это работает, использование коррелированных операторов SELECT в предложении SELECT будет иметь худшую производительность, поскольку они выполняются один раз для каждой строки, возвращаемой в вашем запросе.

IFNULL предпочтительнее использовать в этом случае по сравнению с COALESCE. COALESCE предназначен для проверки значения 2+ на нулевое значение, создавая ложное впечатление, когда кто-то еще читает ваш код. Никакой неотъемлемой выгоды нет - согласно документации, они одинаковы.

Ссылка: Основные функции SQLite

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...