如果value为null,则添加列

时间:2012-11-21 18:37:48

标签: mysql

我想根据表格中的字段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
FROM persona_fields
WHERE persona_id = '1'

如果field_valueNULL,我希望能够添加tinyint(对于bool)列。

我试过这个:

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 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为答案就在这里......您正试图获得 field_list 中没有的字段。有时您会收到此错误,因为您正在使用数据库开发工具,其中该字段已修改但尚未提交。

关于你的查询:最好避免这种简单结果的子查询,简单的连接就可以了。