Postgresql用例和测试布尔字段

Postgresql用例和测试布尔字段,sql,postgresql,boolean,case,Sql,Postgresql,Boolean,Case,首先:我正在运行postgresql 8.2并在pgAdmin上测试我的查询 我有一个带有一些字段的表,比如: mytable( id integer, mycheck boolean, someText varchar(200)); 现在,我想要一个与此类似的查询: select id, case when mycheck then (select name from tableA) else (select name from tableB) end as

首先:我正在运行postgresql 8.2并在pgAdmin上测试我的查询

我有一个带有一些字段的表,比如:

mytable(
  id integer,
  mycheck boolean,
  someText varchar(200));
现在,我想要一个与此类似的查询:

 select id,
  case when mycheck then (select name from tableA)
       else (select name from tableB) end as mySpecialName,
  someText;
我试着跑去得到这个:

ERROR: CASE types character varying and boolean cannot be matched
SQL state: 42804
甚至试图用它来愚弄postgresql

case (mycheck::integer) when 0 then
没用


所以,我的问题是:既然sql没有if,只有case,那么我该如何对布尔字段执行if呢?

你的问题是你的值不匹配(在
之后的表达式和
之后的表达式,以及
之后的表达式和
),而不是你的谓词(在
之后的表达式和
之后的表达式)。确保
从表A选择名称
从表B选择名称
返回相同的结果类型
mycheck
应该是一个布尔值

我在PostgreSQL 9.0beta2上运行了这个查询,并且(除了必须将mytable
中的
添加到SELECT语句以及创建Table
tableA
tableB
),它没有产生任何类型错误。但是,我会收到一条错误消息,与您在运行以下程序时描述的错误消息非常相似:

select case when true
           then 1
           else 'hello'::text 
       end;
上述收益率:

ERROR:  CASE types text and integer cannot be matched

我刚刚在PostgreSQL 8上运行了以下功能:

select id,
 case when mycheck = true then (...)
      else (...),
 someText;