2015-07-11 94 views
0

我有多個表,我正在使用以下查詢按expiry_date篩選未過期的記錄。'where子句'中的未知列'expiry_date'我的sql查詢

我的查詢:

SELECT 

    MT.id, 
    CONCAT(MEM.name,' ',MEM.last_name) AS name, 
    IFNULL((SELECT MAX(MFT.membership_end_date) 
     FROM membership_future_transaction AS MFT 
     WHERE MFT.membership_transaction_id = MT.id),MM.end_date) AS expiry_date, 
    MEM.phone, 
    MEM.email, 
    MMST.name AS membership_name, 
    MMST.price, 
    MMST.session 
FROM 
    membership_transaction AS MT 
    LEFT JOIN member_master AS MEM ON MEM.id = MT.member_id 
    LEFT JOIN members_membership AS MM ON MM.membership_transaction_id = MT.id 
    LEFT JOIN membership_master AS MMST ON MMST.id = MT.membership_id 
WHERE 
    MT.is_casual = 'No' 
    AND MT.is_deleted = 'No' 
    AND MM.is_cancelled = 'No' 
    AND expiry_date >= '2016-01-01'" 

但我得到了「where子句」錯誤,請幫我我在這裏失蹤未知列「EXPIRY_DATE」。

+2

[using-column-alias-in-where-clause-of-mysql-query-produce-an-error]的副本(http://stackoverflow.com/questions/942571/using-column-alias-in -where-clause-of-mysql-query-produce-an-error) – amdixon

+0

你在哪個表中有'expiry_date'列? – Gunaseelan

+1

如果您使用別名,請使用別名 – Drew

回答

0

MySQL有一個可能很漂亮的功能,您可以在其中使用帶有別名的having。因此,如果您將where子句更改爲:

WHERE MT.is_casual = 'No' AND 
     MT.is_deleted = 'No' AND 
     MM.is_cancelled = 'No' 
HAVING expiry_date >= '2016-01-01'" 

然後它應該工作。當然,這不會像您期望的group by查詢那樣工作。