Subject Re: [ib-support] FBUDF NVL Problem
Author Helen Borrie
At 10:27 AM 14/03/2003 -0300, you wrote:
>Hi,
>i'm trying to use a nvl function with a union sql. I'm getting garbage data
>instead what i expected.
>
>A small exemple of my query is:
>
>select
> INVL(CRIADOR.ID_PESSOA, -1) ID_GRUPO,
> SNVL(CRIADOR.NOME, 'Criador Indefinido') NOME_GRUPO,
> A.ID_ANIMAL
>from
> ANIMAL A left outer join
> PESSOA CRIADOR on (A.ID_CRIADOR = CRIADOR.ID_PESSOA)
>
>
>union
>
>select
> INVL(CRIADOR.ID_PESSOA, -1) ID_GRUPO,
> SNVL(CRIADOR.NOME, 'Criador Indefinido') NOME_GRUPO,
> A.ID_ANIMAL
>from
> ANIMAL A left outer join
> PESSOA CRIADOR on (A.ID_CRIADOR = CRIADOR.ID_PESSOA)
>
>This is a know bug?

Not a bug in the engine! :-)
You are trying to make a union of two identical sets of data from the same
table.... Still, if this is really what you want to do, the way to make
the query extract twice from the same tables is to use different table
aliases for the second set. So, you would have something like this:

select
INVL(CRIADOR1.ID_PESSOA, -1) ID_GRUPO,
SNVL(CRIADOR1.NOME, 'Criador Indefinido') NOME_GRUPO,
A1.ID_ANIMAL
from
ANIMAL A1 left outer join
PESSOA CRIADOR1 on (A1.ID_CRIADOR = CRIADOR1.ID_PESSOA)

union
select
INVL(CRIADOR2.ID_PESSOA, -1) ID_GRUPO,
SNVL(CRIADOR2.NOME, 'Criador Indefinido') NOME_GRUPO,
A2.ID_ANIMAL
from
ANIMAL A2 left outer join
PESSOA CRIADOR2 on (A.ID_CRIADOR2 = CRIADOR2.ID_PESSOA)

heLen