Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Monan Bertoluci

Relacionamentos Nulos (+)

Recommended Posts

Senhores, imaginem a seguinte situação:

 

Estruturas das tabelas:

 

TABLE_TELEFONE

CODIGO_CLIENTE INTEGER FK

NUMERO INTEGER

TIPO VARCHAR(3) --TEL = TELEFONE / CEL = CELULAR

 

TABLE_CLIENTE

CODIGO INTEGER PK

NOME

 

Dados das tabelas:

 

TABLE_CLIENTE

CODIGO NOME

1 JOSÉ

2 ANA MARIA

3 CARLOS

 

 

TABLE_TELEFONE

CODIGO_CLIENTE NUMERO TIPO

1 345777 TEL

1 881875 CEL

2 346855 TEL

 

Então com essa estrutura iremos montar uma query para trazer os clientes e seus telefones:

 

 

SELECT *

FROM TABLE_CLIENTE CLI,

TABLE_TELEFONE TEL,

TABLE_TELEFONE CEL,

WHERE TEL.CODIGO_CLIENTE = CLI.CODIGO

AND TEL.TIPO = 'TEL'

AND CEL.CODIGO_CLIENTE = CLI.CODIGO

AND CEL.TIPO = 'CEL'

 

Desta forma a query só ira trazer os dados do JOSÉ que é o unico que possui Telefone e Celular. No caso da ANA MARIA que só possui telefone e do CARLOS que não possui nem telefone a condição não será satisfeita. (Vale ressaltar que não é para o resultado se duplicar, ou seja, para o usuário José a consulta deve trazer apenas uma unica linha com seus respectivos dados.)

 

Bom o problema esta aqui. No Oracle (banco que tenho maior familiaridade eu simplesmente insiro o (+) na frente da tabela que pode não haver resultados e ele traz os resultados mesmo que nulos.) Ex:

 

 

SELECT *

FROM TABLE_CLIENTE CLI,

TABLE_TELEFONE TEL,

TABLE_TELEFONE CEL,

WHERE TEL.CODIGO_CLIENTE(+) = CLI.CODIGO

AND TEL.TIPO(+) = 'TEL'

AND CEL.CODIGO_CLIENTE(+) = CLI.CODIGO

AND CEL.TIPO(+) = 'CEL'

 

 

Mas... e no firebird? tem alguma forma de realizar esta consulta? algum comando especial que realize esta função? alguem poderia me ajudar?

 

 

 

Desde ja agradeço.

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.