2012-11-21 77 views
3

我想根據表中的字段field_value是否爲NULL將列添加到結果集。如果值爲空,則添加一列

這裏是我的查詢工作:

SELECT field_id, (
    SELECT field_value 
    FROM employee_field_info 
    WHERE employee_id = '1' 
    AND field_id = persona_fields.field_id 
) AS field_value, ( 
    SELECT field 
    FROM FIELDS WHERE id = persona_fields.field_id 
) AS field_name 
FROM persona_fields 
WHERE persona_id = '1' 

什麼,我希望能夠做的就是添加一個TINYINT(一個布爾值)列,如果field_valueNULL

我已經試過這樣:

SELECT field_id, (
    SELECT field_value 
    FROM employee_field_info 
    WHERE employee_id = '1' 
    AND field_id = persona_fields.field_id 
) AS field_value, ( 
    SELECT field 
    FROM FIELDS WHERE id = persona_fields.field_id 
) AS field_name, 
IF(field_value IS NULL, "0","1") AS value_bool 
FROM persona_fields 
WHERE persona_id = '1' 

但是,這只是出現在「未知列'FIELD_VALUE‘字段列表’。 有反正我能做到我想要做的,還是我非常倒黴的?

回答

2

你不能從一個子選擇參考父SELECT列。子選擇基本孤立地運行,你需要做的是什麼重新寫爲JOIN您的查詢是相當令人費解和難以遵循,我認爲不完整的,所以我只能近似解

下面是一個例子:。

SELECT field_id, 
    employee_field_info.field_value, 
    IF(employee_field_info.field_value IS NULL, "0","1") AS value_bool 
    FROM persona_fields 
    LEFT JOIN employee_field_info ON employee_field_info.field_id=persona_fields.field_id 
    WHERE employee_id=1 
+0

這就是我所需要的。謝謝! – smarble

0

我認爲答案就在這裏..你試圖得到一個不是ava的領域在field_list中可用。有時你會得到這個錯誤,因爲你正在使用一個數據庫開發工具,其中該字段被修改爲尚未提交。

關於您的查詢:最好避免這種簡單結果的子查詢,一個簡單的連接將會非常好。

相關問題