Array
(
)

SQL buscando um mesmo campo em 3 tabelas

Aerreira
   - 22 nov 2005

Alguém poderia me ajudar com um código SQL para esta situação:

Tenho tabelas (resumidamente) como abaixo:

MOVTO: (pront, codigo, tipo, quantidade)

SERV: (codigo, descricao)
MAT: (codigo, descricao)
MED: (codigo, descricao)

Preciso de um grid que apresente: pront, codigo, descricao e quantidade

O campo movto.CODIGO pode armazenar 3 tipos de códigos, conforme o conteúdo do campo tipo:

se TIPO = 1 o código se referencia à tabela SERV
se TIPO = 2 o código se referencia à tabela MAT
se TIPO = 3 o código de referencia à tabela MED

Seria algo do tipo:

select M.pront, M.codigo, M.tipo, S.descricao, M.quant
from movto M, serv S, mat T, med D
where (M.tipo=1 and M.codigo=S.codigo) or (M.tipo=2 and M.codigo=T.codigo) or (M.tipo=3 and M.codigo=D.codigo)

porém o S.descricao poderia ser também T.descricao ou D.descricao

A dúvida é:
Como apresentar no mesmo campo DESCRIÇÃO do grid a descrição correspondente a uma das 3 tabelas, que varia conforme o valor de movto.TIPO ?


Firekiller
   - 23 nov 2005

Qual banco você tá usando????

Se for Firebird (1.5 ou posterior) poderia ficar assim:

#Código


select
pront,
codigo,
case tipo
when 1 then ´SERV´
when 2 then ´MAT´
when 3 then ´MED´
else ´ ´
end as TIPO,
case tipo
when 1 then (select descricao from serv s where s.codigo=m.codigo)
when 2 then (select descricao from mat s where s.codigo=m.codigo)
when 3 then (select descricao from med s where s.codigo=m.codigo)
else ´ ´
end as DESCRICAO,
quantidade
from
MOVTO M


dessa forma seria mostrado o que você quer, e ainda especificando o que é, ou seja, qual é o tipo.


Aerreira
   - 23 nov 2005


Citação:
Qual banco você tá usando????


Esqueci de especificar, mas é FireBird 1.5. sim.
Vou testar e informo em seguida...

Valeu Firekiller...


Aerreira
   - 23 nov 2005

Perfeito.
Deu certo.
Valeu.