2017-07-27 35 views
1
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(如果爲空)。如何做一個子查詢,如果記錄爲空,則顯示-1

只是爲了澄清,我不能使用連接,我需要這樣做,即使沒有定義min_stock,所有產品和倉庫都會顯示min_stock。

建議優化,將不勝感激。

+0

參見:[?我爲什麼要爲了什麼,在我看來是一個非常簡單的SQL查詢提供MCVE(https://meta.stackoverflow.com/questions/333952 /爲什麼,應該-I-提供-AN-MCVE換什麼,似乎對我將要-A-極簡單的SQL查詢) – Strawberry

回答

0

當然你可以使用JOIN。你想要一個CROSS JOIN,所以你應該明確你想如何組合這兩個表。然後,您可以按照CROSS JOINLEFT 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; 
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 

希望這對你有幫助。

0

你可以只批更新所有的值或使min_stock默認,當您創建SQL行爲-1。這裏是我會做什麼:

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

相關問題