获取产品数量

时间:2009-09-13 14:35:05

标签: sql sqlite

使用sqlite3,我有两个表:产品,订单。我想知道商店里剩下多少产品。

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

如果我选择1个产品,我想要一个我所有产品的列表吗?

3 个答案:

答案 0 :(得分:2)

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 :(得分:1)

试试这个:

SELECT
    pid,
    txt,
    price,
    qty-coalesce(
        (SELECT sum(qty)
         FROM orders
         WHERE orders.pid = products.pid),0)
FROM products

答案 2 :(得分:0)

我建议使用:

   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语句将具有最差的性能,因为它们对查询中返回的每一行执行一次。

与COALESCE相比,在这种情况下优选使用IFNULL。 COALESCE用于检查2+值是否为null,当其他人读取您的代码时给人一种错误的印象。没有任何固有的好处 - 根据文档,它们是相同的。

参考:SQLite Core Functions