-----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
