第一:我正在运行
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
没用.
你的问题是你的值不匹配(之后的表达式和其他),而不是你的谓词(表达式之后的表达式).确保从tableA中选择名称并从tableB中选择名称返回相同的结果类型. mycheck应该是一个布尔值.
我在Postgresql 9.0beta2上运行了这个查询,并且(除了必须从mytable添加到SELECT语句以及创建表tableA和tableB),它没有产生任何类型错误.但是,我收到的错误消息很像您在运行以下内容时所描述的错误消息:
select case when true then 1 else 'hello'::text end;
以上产量:
ERROR: CASE types text and integer cannot be matched
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。