2016-09-16 75 views
-3

如果areas.id爲空,那麼只顯示'MISSING AREA'數據而不是包含空白?我嘗試使用outlet.STATUS <> 0,但SQL表示列STATUS不存在。所以在這種情況下,我創建的STATUS列不能被過濾?SQL中創建列中的條件

很抱歉的混亂,樣本數據將是這樣的:

商店

id firm name area id    
---------------------- 
1 abc  21    
2 xyz  23    
3 def  42   

領域

id 
-- 
20 
23 
40 

連接的表與STATUS:

id firm name area_id id Status 
--------------------------------------- 
1 abc  21  NULL MISSING AREA 
2 xyz  23  23  
3 def  42  NULL MISSING AREA 

我想不顯示shops.id = 2,只顯示1和3

select 
    shops.id, shops.firm_name, shops.area_id, 
    areas.id, 
    IF(areas.id, "", "MISSING AREA") as STATUS 
from 
    shops 
left join 
    areas on areas.id = shops.area_id 
where 
    shops.area_id != 0 
order by 
    STATUS asc 
+2

請標記DBMS,並提供一些樣品和輸出數據,我認爲這是很容易的要求。 – Susang

+0

你提到'outlet.STATUS <> 0',查詢有'outlets.area_id!= 0',兩個不同的'outlet'拼寫。無論哪種方式,這個'出口'是什麼?我沒有在'from','join'子句中的任何地方看到'outlet'。 – sstan

回答

0

如果你想在計算列過濾器,你有兩個選擇:

  • 重複WHERE子句中的列表達式 - 由於代碼重複,這並不理想。
  • SELECT換算成另一個SELECT中的計算列,然後過濾外部 - 這允許您使用單個表達式進行稍長的查詢。

這裏是第二個方法的一個例子:

SELECT * FROM (
    SELECT 
     shops.id 
    , shops.firm_name 
    , shops.area_id 
    , areas.id 
    , CASE WHEN areas.id is NULL THEN 'MISSING AREA' END as STATUS 
    FROM shops 
    LEFT JOIN areas ON areas.id = shops.area_id 
) 
WHERE ... -- You can use STATUS here 
ORDER BY STATUS