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'

field_value如果是,我想要做的是添加一个 tinyint(用于布尔)列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'。无论如何我可以完成我想做的事情,还是我很不走运?

4

2 回答 2

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
于 2012-11-21T18:41:35.990 回答
0

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

关于您的查询:对于这样简单的结果,最好避免这样的子查询,一个简单的连接会很好。

于 2012-11-21T18:42:28.387 回答