-----Mensagem original-----
De: pgbr-geral [mailto:[email protected]] Em nome
de Wellington
Enviada em: quinta-feira, 28 de novembro de 2013 04:04
Para: [email protected]
Assunto: [pgbr-geral] Duvidas em consultas

>>Pessoal,
>>
>>tenho 2 duvidas.
>>
>>- Considerando a consulta abaixo:
>>SELECT *
>>  FROM tabela1
>>    JOIN tabela2 ON tabela2.idcliente = tabela2.idcidade;
>>
>>No exemplo acima ha um erro no JOIN em que a tabela2 esta referenciando a
ela mesma,
>>pergunto: Por que o PostgreSQL executa normalmente essa consulta sem
acusar erros?
>>

Não há erro. Pelo menos não um erro de sintaxe ou de lógica. Há sim um erro
de raciocínio (Estou considerando que na tabela2 existam os campos idcliente
e idcidade).  Considere no entanto que o resultado não vai ser o esperado.

>>
>>- Na consulta abaixo:
>>select 15.5 / (4/9);
>>o PostgreSQL acusa erro de divisao por zero, mas se eu fizer essa
alteracao select 15.5 / (4/9.0); a consulta roda normalmente, por que isso
acontece?
>>

Quando você coloca 4 / 9 o postgres considera que ambos os valores são
inteiros (implícitos), já que você não disse a ele qual o tipo de valor ele
é. O inteiro 4 dividido pelo inteiro 9 vai dar um inteiro 0. 15 dividido por
0 dá "division by zero".
Quando você coloca 4 / 9.0 você está informando o postgres de que o 9.0 é um
numeric, e não um inteiro. Inteiro 4 dividido pelo numeric 9.0  é igual a
0,4444444444444444..., e numeric 15,5 dividido pelo numeric
0,4444444444444444 retorna 34,875.

O Postgres é bem inteligente, porém, por enquanto ainda não faz
adivinhações. Em situações como essas é interessante definir os CAST's de
forma explicita, e não contar com a sorte implícita.

15.5::numeric / (4::numeric / 9::numeric) => 34.875::numeric


>>desde ja agradeco,
>>Wellington 


_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a