2013-09-30 44 views
1

當我使用IFNULL的原因是爲了改變空字段爲0,但我總是得到這樣的錯誤:未知列使用IFNULL和別名

Error Code: 1054. Unknown column 'inc.month_id' in 'on clause'

這裏是我的MySQL查詢:

SELECT * FROM tbl_month 
left joins 
(
    select ifnull(tbl_income.rentals,0) as rentals, ifnull(tbl_income.electric,0) as electric, ifnull(tbl_income.month_id,0) as month_id 
    from tbl_income 
    where tbl_income.igp_id = 1 
) as inc on tbl_month.month_id = inc.month_id; 

編輯:我手動添加所有列,但空字段不會被替換爲0。

OUTPUT: enter image description here

+1

你不能這樣做'IFNULL(「*」,0)'這樣,你必須列出所有列,並把' ifnull「,這是無效的語法。 –

+0

我做了一些修改 –

+0

給每列一個別名,如下面的答案建議'select ifnull(tbl_income.rentals,0)AS month_id,...' –

回答

0

這是因爲left join的;要麼使用inner join或將ifnull在主要子查詢中選擇不:

SELECT 
    ifnull(inc.rentals,0) as rentals, 
    ifnull(inc.electric,0) as electric, 
    ifnull(inc.month_id,0) as month_id, 
    ... 
FROM tbl_month t1 
left join tbl_income as inc on t1.month_id = inc.month_id; 
+0

謝謝。我所做的是在主選擇語句中移動'ifnull'。 –

+0

@JaysonTamayo - 隨時歡迎您:)很高興我可以幫助:) –

-1

你的問題是,你不叫在臨時表「INC」的列。

你有這樣的

ifnull('*',0)

,但應該有

ifnull('*',0) as month_id

注:

ifnull('*',0)總是導致與'*'

如果您想驗證只有month_id列必須做這樣的

ifnull(month_id,0) as month_id

+0

-1不是sql如何工作。 – Johan

+0

@Johan,SQL如何工作。結果總是'*',但這是另一回事。 –

+0

答案稍好,但不是糾正答案,而是現在令人困惑。和句子:'應該有ifnull('*',0)作爲month_id.'沒有意義。別名不是這裏的問題,不引用列是問題。無論如何,這個問題已經轉移,所以'*'問題不再鏈接到任何東西.... – Johan