2016-01-21 48 views
1

我想加入3表一列總和已經與另一列未知列在WHERE子句與加入

這裏進行比較是我的查詢

SELECT 
    *, `e`.`id` AS `event_ac_id`, 
    SUM(CASE WHEN trans.gift_transaction_status = 1 
       THEN trans.event_gift_amount 
       ELSE 0 END) as amount 
FROM 
    `tbl_event_category` `cat` 
LEFT JOIN 
    `tbl_event` `e` ON e.event_category = cat.id 
LEFT JOIN 
    `tbl_organisation` `org` ON e.organisation_id = org.id 
LEFT JOIN 
    `tbl_event_gift_transaction` `trans` ON e.id = trans.event_id 
WHERE 
    cat.type ='campaign' AND is_approved=1 
    AND e.funding_goal_amount <= amount 
GROUP BY 
    `event_ac_id` 
LIMIT 8 

異常(數據庫除外)「警予\分貝\異常 '與消息 ' SQLSTATE [42S22]:柱未發現:在 1054未知列 '量' 'where子句'

回答

1

您需要了解SQL是從右向左評估的。因此,當MYSQL解析器查找amount列時,它不會被找到並因此出現錯誤。

manual說:

「A select_expr可以給出使用AS ALIAS_NAME一個別名的別名是用作表達式的列名 ,並且可以在GROUP BY使用, ORDER BY,或HAVING。條款「。

標準SQL不允許你引用列別名在WHERE子句 。施加此限制是因爲當執行WHERE代碼 時,列值可能尚未確定。

你可以試試這個:

SELECT *, `e`.`id` AS `event_ac_id`, 
    SUM(CASE WHEN trans.gift_transaction_status = 1 THEN trans.event_gift_amount 
    ELSE 0 END) as amount 
FROM `tbl_event_category` `cat` LEFT JOIN `tbl_event` `e` 
     ON e.event_category=cat.id 
LEFT JOIN `tbl_organisation` `org` ON e.organisation_id=org.id 
LEFT JOIN `tbl_event_gift_transaction` `trans` ON e.id=trans.event_id 
WHERE cat.type ='campaign' 
AND is_approved=1 
HAVING e.funding_goal_amount <= amount 
GROUP BY `event_ac_id` LIMIT 8 
+0

我已經試過'SUM(CASE WHEN trans.gift_transaction_status = 1,則trans.event_gift_amount ELSE 0 END)>電子.funding_goal_amount'還有什麼解決方案 –

+0

@KakulSarma: - 嘗試使用HAVING子句而不是WHERE子句來使用您的條件。 –

1

過濾器上的總價值爲基礎在具有

可能是你需要這個

SELECT *, `e`.`id` AS `event_ac_id`, 
    SUM(CASE WHEN trans.gift_transaction_status = 1 THEN trans.event_gift_amount 
    ELSE 0 END) as amount 
FROM `tbl_event_category` `cat` LEFT JOIN `tbl_event` `e` 
     ON e.event_category=cat.id 
LEFT JOIN `tbl_organisation` `org` ON e.organisation_id=org.id 
LEFT JOIN `tbl_event_gift_transaction` `trans` ON e.id=trans.event_id 
WHERE cat.type ='campaign' 
    AND is_approved=1 
    HAVING e.funding_goal_amount <= amount 
    GROUP BY `event_ac_id` LIMIT 8 
0

計算值,不能在WHERE條款。只有實際的列需要在那裏使用。

如果要過濾事後WHERE條款已被執行,則可以使用HAVING聲明

相關問題