Boa Noite, estou tentando fazer um select onde tenho 3 colunas(cdrecebidode,cdrepassadopara,cdTitular) todas tem referencia cliente. Agora estou precisando pegar o nome das 3 puxando o nome , mas nao consigo
Esse CDTITULAR é o cliente
Envia o DER do banco que montamos o join
der???
http://prntscr.com/h9mim5 - cheque
http://prntscr.com/h9mivf - cliente
http://prntscr.com/h9mj7u - status
segue estrutura
eu quero em vez de pegar o id do cdtitular pegar o nome dele,cdrecebidode e o cdrepassado
Vou sugerir uma solução baseada no que entendi da sua questão, que achei um pouco confusa: Você tem uma tabela cheque
e tem três chaves estrangeiras para a tabela cliente
(cdRecebidoDe
, cdRepassadoPara
e cdTitular
). Porém, ao invés de fazer um select na tabela cheque
e trazer as chaves estrangeiras, você quer trazer o campo cliente.nome
.
Vejo que tem duas formas de fazer isso:
1. Ligando cada chave estrangeira de cheque
em uma tabela individual de cliente
:
select c.descricao,
receb.nome as recebido_de,
repas.nome as repassado_para,
titular.nome as titular
from cheque c,
cliente receb,
cliente repas,
cliente titular
where c.cdRecebidoDe = receb.id
and c.cdRepassadoPara = repas.id
and c.cdTitular = titular.id
and c.id = :parametro:
2. Usar subselect (não recomendo):
select c.descricao,
(select nome
from cliente
where id = c.cdRecebidoDe) as recebido_de,
(select nome
from cliente
where id = c.cdRepassadoPara) as repassado_para,
(select nome
from cliente
where id = c.cdTitular) as titular
from cheque c
where c.id = :parametro:
Recomendo a primeira opção, até porque você poderá futuramente trazer mais informações individuais do Cliente para cada tipo.
Entendi segue abaixo o sql
SELECT cdrecebidode.nome, cdrepassadopara.nome, cdtitular.nome, ch.* from cheque ch LEFT JOIN cliente cdrecebidode ON ch.cdrecebidode = cdrecebidode.id LEFT JOIN cliente cdrepassadopara ON ch.cdrepassadopara = cdrepassadopara.id LEFT JOIN cliente cdtitular ON ch.cdtitular= cdtitular.id ORDER BY ch.id