Обсуждение: What does Postgresql do when using CASE WHEN without ELSE?

Поиск
Список
Период
Сортировка

What does Postgresql do when using CASE WHEN without ELSE?

От
Seref Arikan
Дата:
Greetings,
I want to use CASE WHEN to make sure that I don't try to call a function on
a row that does not exist. This is used within a WHERE statement as follows
(without the function call I've mentioned);

WHERE
      CASE WHEN EXISTS(SELECT ATRNODE.featuremappingid from ELEMENT1,
ATRNODE where ELEMENT1.pathstring || '/' || 'name/value' =3D
ATRNODE.pathstring)
      THEN
      (   ELEMENT1.pathstring || '/' || 'name/value' =3D ATRNODE.pathstring
          and
          ATRNODE.valstring =3D 'M=E5ltillst=E5nd' --this will be where the
function is going to be used
      )
      ELSE
       ELEMENT1.id =3D -1291927189371983619872981729
      END

The overall mechanism lets me apply a constraint so that if a row does not
exist, the query returns no results, without attempting to process
ATRNODE.valstring value (which represents more complicated info that will
exist in the row in other cases)
The thing is, when I omit the ELSE, the query still returns no results if
the row does not exist. It is as if an ELSE statement is added with an
impossible constraint, just like the one I'm explicitly providing.
 I'm keeping the ELSE so that I explicitly introduce a where statement that
will not correspond to any rows, but what is happening when I omit ELSE, so
that the query still functions as it should?

Best regards
Seref

Re: What does Postgresql do when using CASE WHEN without ELSE?

От
Seref Arikan
Дата:
Apologies, I found the answer in the documentation:
http://www.postgresql.org/docs/9.0/static/functions-conditional.html says:
"If the ELSE clause is omitted and no condition is true, the result is
null."

Best regards
Seref



On Tue, Feb 12, 2013 at 10:39 AM, Seref Arikan <
serefarikan@kurumsalteknoloji.com> wrote:

> Greetings,
> I want to use CASE WHEN to make sure that I don't try to call a function
> on a row that does not exist. This is used within a WHERE statement as
> follows (without the function call I've mentioned);
>
> WHERE
>       CASE WHEN EXISTS(SELECT ATRNODE.featuremappingid from ELEMENT1,
> ATRNODE where ELEMENT1.pathstring || '/' || 'name/value' =3D
> ATRNODE.pathstring)
>       THEN
>       (   ELEMENT1.pathstring || '/' || 'name/value' =3D ATRNODE.pathstri=
ng
>           and
>           ATRNODE.valstring =3D 'M=E5ltillst=E5nd' --this will be where t=
he
> function is going to be used
>       )
>       ELSE
>        ELEMENT1.id =3D -1291927189371983619872981729
>       END
>
> The overall mechanism lets me apply a constraint so that if a row does no=
t
> exist, the query returns no results, without attempting to process
> ATRNODE.valstring value (which represents more complicated info that will
> exist in the row in other cases)
> The thing is, when I omit the ELSE, the query still returns no results if
> the row does not exist. It is as if an ELSE statement is added with an
> impossible constraint, just like the one I'm explicitly providing.
>  I'm keeping the ELSE so that I explicitly introduce a where statement
> that will not correspond to any rows, but what is happening when I omit
> ELSE, so that the query still functions as it should?
>
> Best regards
> Seref
>
>