Erro no select com FB que não acontecia no IB

Firebird

29/06/2006

Olá pessoal,

estou com um probleminha aqui, tenho um select com a cláusula UNION que funciona perfeitamente com o IB6, porém ao instalar o FB 1.5.2 parou de funcionar e apresenta a msg de erro de ´coluna desconhecida´.

a questão é que o WHERE do segundo SELECT (após a cláusula UNION) faz referência a uma coluna do primeiro SELECT, é aí que aparece o erro.

e isso não acontecia com o IB6, alguém imagina o que está acontecendo ?

[]´s
AASN


Aasn

Aasn

Curtidas 0

Respostas

Joaoshi

Joaoshi

29/06/2006

Quando mudei para FB tive este problema em alguns selects que utilizavam mais de uma tabela. Passei a utilizar sempre o nome da tabela antes dos campos.
Ex.: SELECT CLIENTE.CODIGO,CLIENTE.ENDERECO FROM CLIENTE

E se não for nada disto me desculpe.


GOSTEI 0
Sremulador

Sremulador

29/06/2006

estou com o mesmo problema porem e com um sub-select


GOSTEI 0
Weber

Weber

29/06/2006

Não pode se dizer que é um problema e sim que é uma correção de bug.

No IB6 é possivel usar uma clausula Where sem identificar de qualquer tabela se refere o campo, isto pode ocasionar erros.

No FB você é obrigado a informar qual tabela se refere o campo isto faz com que seu select seja muito mais confiável.


GOSTEI 0
Aasn

Aasn

29/06/2006

Caro weber,

O campo referenciado no WHERE está identificado não com o nome da tabela mas com o alias correspondente!

select 
 a.*, 
 b.operacao, 
 b.chegada, 
 b.atendimento, 
 b.ok, 
 b.categoria, 
 b.servico, 
 b.obs, 
 b.encaixe, 
 b.flag, 
 c.nome, 
 c.codigo, 
 c.nascimento, 
 c.ultima_consulta, 
 d.nome as nome_convenio
from agenda_dia(:medico,:data,:dia) a
left join agendas b on (b.medico = :medico) and (b.data = :data) and (b.hora = a.hora)
left join pacientes c on (c.codigo=b.paciente)
left join convenios d on (d.codigo=b.categoria)

union

select 
 e.data, 
 e.hora, 
 e.operacao, 
 e.chegada, 
 e.atendimento, 
 e.ok, 
 e.categoria, 
 e.servico, 
 e.obs, 
 e.encaixe, 
 e.flag, 
 c.nome, 
 c.codigo, 
 c.nascimento, 
 c.ultima_consulta, 
 d.nome as nome_convenio
from agendas e
left join pacientes c on (c.codigo=e.paciente)
left join convenios d on (d.codigo=e.categoria)
where (e.medico = :medico) and (e.data = :data) and (e.hora <> a.hora)
order by 2


[]´s
AASN


GOSTEI 0
Weber

Weber

29/06/2006

Evite utilizar Select * e Union, isto pode ser a causa do seu problema.


GOSTEI 0
Aasn

Aasn

29/06/2006

Caros colegas,

O erro não está no ´select a.* ...´ até pq são só dois campos... é uma falha nno FB mesmo, até pq na cláusula where faço referência ao campo através do alias ´where e.hora <> a.hora´.

[]´s
AASN


GOSTEI 0
POSTAR