2009-08-03 26 views
1

我想按狀態排序順序條目,但是在我的數據庫中沒有狀態列,我正在嘗試生成它,使用數據庫中其他列上的當前值進行飛行。在MySQL中選擇數據並通過臨時列數據限制(WHERE)

我在查詢中用CASE語句創建了一個「臨時」列。我現在想要做的只是獲取匹配CASE列的值的錶行。

這裏是我到目前爲止已經做了一個例子:

 
CASE 
    WHEN date_due = 0 AND date_sent = 0 THEN "opened" 
    WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent" 
END AS status 

我的問題是status現在顯然是一個未知的列當我嘗試對其進行過濾:

... WHERE status = "sent" ...

有什麼我的情況最好的解決方案?是否可以定義一個包含狀態的臨時變量?

回答

0

在MySQL中,這個工程

select 
... 
CASE 
    WHEN date_due = 0 AND date_sent = 0 THEN "opened" 
    WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent" 
END AS status 

... 
from table 

where 
... (other conditions) ... 

**HAVING status = "sent"** 

如果你不需要包括其他條件刪除WHERE,只留下SELECT ... FROM ... HAVING ...

0

where在列之前被評估。因此,當評估where時,不存在status列。你必須把你的case陳述或條件where子句中:

where 
    CASE 
     WHEN date_due = 0 AND date_sent = 0 THEN "opened" 
     WHEN date_sent > 0 AND (CURRENT_DATE - date_due) <= 0 THEN "sent" 
    END = 'sent' 

更務實的態度,不過,你會想這樣做:

where 
    date_sent > 0 
    and (CURRENT_DATE - date_due) <= 0 

,可以使用別名的列的唯一條款名稱是order by子句(跨數據庫 - 有些DB,如MySQL,允許您在group by中使用它們)。