2012-11-21 6 views
3

Я хотел бы добавить столбец в результирующий набор, исходя из того, является ли поле field_value в таблице NULL.Добавить столбец, если значение равно 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 (для BOOL) столбец, если 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, 
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 ilable в field_list. иногда вы получите эту ошибку, потому что используете инструмент разработки БД, в котором это поле еще не изменено.

о вашем запросе: лучше избегать таких подзапросов для такого простого результата, простое соединение будет очень хорошим.

Смежные вопросы