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_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'

しかし、それは「「フィールドリスト」の不明な列「フィールド値」に出くわすだけです。とにかく私がやろうとしていることを達成できるのでしょうか、それとも運が悪いのでしょうか?

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で利用できないフィールドを取得しようとしています。フィールドが変更され、まだコミットされていない DB 開発ツールを使用しているため、このエラーが発生することがあります。

クエリについて: このような単純な結果については、そのようなサブクエリを避けることをお勧めします。単純な結合は非常に問題ありません。

于 2012-11-21T18:42:28.387 に答える