Postgresql案例和测试布尔字段

Wra*_*cko 6 sql postgresql boolean case

第一:我正在运行postgresql 8.2并在pgAdmin上测试我的查询.

我有一张桌子上有一些字段,说:

mytable(
  id integer,
  mycheck boolean,
  someText varchar(200));
Run Code Online (Sandbox Code Playgroud)

现在,我想要一个类似于此的查询:

 select id,
  case when mycheck then (select name from tableA)
       else (select name from tableB) end as mySpecialName,
  someText;
Run Code Online (Sandbox Code Playgroud)

我试着跑,得到这个:

ERROR: CASE types character varying and boolean cannot be matched
SQL state: 42804
Run Code Online (Sandbox Code Playgroud)

甚至试图愚弄postgresql

case (mycheck::integer) when 0 then
Run Code Online (Sandbox Code Playgroud)

没用.

所以,我的问题是:因为sql没有if,只有大小写,我想如何用布尔字段做一个if?

Joe*_*ams 11

你的问题是你的值(表达式then和之后的表达式else)不匹配,而不是你的谓词(后面的表达式when).确保select name from tableAselect name from tableB返回相同的结果类型. mycheck应该是一个布尔值.

我跑的PostgreSQL 9.0beta2此查询,并(除不必添加from mytable到SELECT语句,以及创建表tableAtableB),并没有产生任何类型的错误.但是,我收到的错误消息很像您在运行以下内容时所描述的错误消息:

select case when true
           then 1
           else 'hello'::text 
       end;
Run Code Online (Sandbox Code Playgroud)

以上产量:

ERROR:  CASE types text and integer cannot be matched
Run Code Online (Sandbox Code Playgroud)