如果记录为空,如何显示-1的子查询

时间:2017-07-27 12:20:19

标签: mysql database

SELECT w.warehouse, 
       p.category, 
       p.product, 
      (select cr.min_stock 
       from critical cr 
       where cr.warehouse_id = w.id 
             and cr.product_id = p.id) as min_stock
FROM warehouse w, 
     product p

如果min_stock为空,如何使其显示为-1。

为了澄清,我不能使用join,我需要以这样的方式制作它,即使没有定义min_stock,所有产品和仓库都会显示min_stock。

建议优化将不胜感激。

3 个答案:

答案 0 :(得分:1)

使用ifnull功能。

SELECT w.warehouse, 
       p.category, 
       p.product, 
      ifnull((select cr.min_stock 
       from critical cr 
       where cr.warehouse_id = w.id 
             and cr.product_id = p.id),0) as min_stock
FROM warehouse w, 
     product p

希望这对你有所帮助。

答案 1 :(得分:0)

当然你可以使用JOIN。你想要一个CROSS JOIN,所以你应该明确你想要如何组合这两个表。然后,您可以使用CROSS JOIN跟踪LEFT JOIN

SELECT w.warehouse, p.category, p.product, 
       coalesce(cr.min_stock, -1) as min_stock 
FROM warehouse w cross join
     product p left join
     critical c
     on cr.warehouse_id = w.id and cr.product_id = p.id;

答案 2 :(得分:0)

您可以批量更新所有值,或者在创建SQL行时将min_stock默认设置为-1。这就是我要做的事情:

UPDATE critical SET min_stock = -1 WHERE min_stock = NULL;