2013-09-22 62 views
0

虛擬colmn我用這個查詢與虛擬列New_Users不能使用過濾器,其中在選擇MYSQL

SELECT `r`.`deal_id` as Deal_ID, 
     concat("2013\-05\-15") as start_date, 
     concat("2013\-05\-16") as end_date, 
     abs(0) AS New_Members 
    FROM (`ws_deal` r) 
WHERE New_Members != 0 
ORDER BY `deal_id`" 

我有一個錯誤「在1未知列‘New_Members’‘where子句’SQL.sql 1 118」

如果我沒有使用New_Members != 0,如果查詢是

SELECT `r`.`deal_id` as Deal_ID, 
     concat("2013\-05\-15") as start_date, 
     concat("2013\-05\-16") as end_date, 
     abs(0) AS New_Members 
    FROM (`ws_deal` r) 
    ORDER BY `deal_id` 
    LIMIT 12" 

我得到一個結果。

Deal_ID start_date  end_date  New_Members 

407 2013-05-15 2013-05-16 0 
408 2013-05-15 2013-05-16 0 
409 2013-05-15 2013-05-16 0 
410 2013-05-15 2013-05-16 0 
411 2013-05-15 2013-05-16 0 
412 2013-05-15 2013-05-16 0 
413 2013-05-15 2013-05-16 0 
414 2013-05-15 2013-05-16 0 
415 2013-05-15 2013-05-16 0 
416 2013-05-15 2013-05-16 0 
417 2013-05-15 2013-05-16 0 

我的問題是爲什麼我不能過濾這個結果。我如何過濾這個。 (您可能想反正New_Member != 0和過濾不需要,但我需要這是通過一個過濾器發生,而這一動態在一個大的查詢集合時,產生的查詢)

非常感謝

+3

您不能在'where'子句中使用別名。只有在'擁有,分組,排序'條款 –

+0

只是一個查詢:'abs(0)'總是會給你值爲'0'。這意味着'New_Member'列中的所有值都是'0'。然後將過濾器應用爲'New_Member!= 0',將不會返回行。那麼你想要達到什麼? – heretolearn

回答

0

不能使用別名列在where子句中,但您可以使用子查詢和按新列過濾:

select 
    Deal_ID, start_date, end_date, New_Members 
from (
    select 
     `r`.`deal_id` as Deal_ID, 
     concat("2013\-05\-15") as start_date, 
     concat("2013\-05\-16") as end_date, 
     abs(0) AS New_Members 
    from (`ws_deal` r) 
) as a 
where New_Members != 0 
order by `deal_id`" 
+1

謝謝你,所有的意見,我想出了錯誤。並做了一個修復。 –

+0

@SamithaSuranjanDharmasiri所以你的問題應該關閉? –

0

首先,abs(0)沒有意義。它總會返回0.

其次,你不能在where子句中使用別名。您必須在查詢中查詢。