Postgresql用例和测试布尔字段
首先:我正在运行postgresql 8.2并在pgAdmin上测试我的查询 我有一个带有一些字段的表,比如: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
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语句以及创建TabletableA
和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;