Случай Postgresql и тестирующий булевы поля

Во-первых: я выполняю postgresql 8.2 и тестирую мои запросы на pgAdmin.

Я имею таблицу с некоторыми полями, говорю:

mytable(
  id integer,
  mycheck boolean,
  someText varchar(200));

Теперь, я хочу запрос similary к этому:

 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 не имеет, если, только случай, как я, предполагает, чтобы сделать если с булевым полем?

6
задан OMG Ponies 22 June 2010 в 19:12
поделиться

2 ответа

Ваша проблема заключается в несоответствии ваших значений (выражения после , затем и else ), а не в вашем предикате (выражение после , когда ]). Убедитесь, что select name from tableA и select name from 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
11
ответ дан 9 December 2019 в 22:28
поделиться

Я только что запустил это на PostgreSQL 8:

select id,
 case when mycheck = true then (...)
      else (...),
 someText;
0
ответ дан 9 December 2019 в 22:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: