[firebase-br] Select com 4 tabelas, exibindo coluna vazia....

Edson de Paulo epaulo2002 em yahoo.com.br
Qua Out 3 14:24:50 -03 2007


	Olá Simone, acho que o pessoal já tirou sua dúvida, mas sugiro que você 
utilize uma ferramenta visual no começo para criar seus selects. Por 
exemplo no "IB Expert", utilize em "tools / Query Builder", lá você pode 
visualizar as ligações entre as tabelas (Foreign Keys) e clicando com o 
botão direito sobre as ligações você indica o tipo de ligação(INNER 
JOIN, LEFT OUTER JOIN, RIGTH OUTER JOIN).
	Indico isso apenas como uma opção didática, depois de que você entender 
bem o conceito dos joins você escrevê-los sozinha.

OBS: Da forma abaixo até funcionaria, em oracle ou my sql por exemplo. 
Utilizando o (+) ao lado da tabela onde "talvez" não exista o valor. No 
seu exemplo:

Select  A.CURSO, A.SERIE, A.TURMA, A.MATRICULA, B.NOTA, C.FALTA, D.NOME
 From  TabelaA A, TabelaB B, TabelaC C, TabelaD D
Where (A.CURSO     =  B.CURSO)
   And (A.SERIE     =  B.SERIE)
   And (A.TURMA     =  B.TURMA)
   And (A.MATRICULA =  B.MATRICULA)
   And (C.CURSO(+)     =  B.CURSO)
   And (C.SERIE(+)     =  B.SERIE)
   And (C.TURMA(+)     =  B.TURMA)
   And (C.MATRICULA(+) =  B.MATRICULA)
   And (A.REGISTRO  =  D.REGISTRO   )
Order By A.MATRICULA


Simone escreveu:
> Boa tarde!
> 
> Gostaria de ajuda pra montagem de um Select, onde uso 4 tabelas, até aí, td
> bem, o problema, é que preciso que mesmo que o registro não seja encontrado
> em determinada tabela, ele exiba a coluna vazia (ou zerada), tem como?!?
> 
> Exemplo:
> TabelaA - CURSO, SERIE, TURMA, MATRICULA, REGISTRO
> TabelaB - CURSO, SERIE, TURMA, MATRICULA, NOTA
> TabelaC - CURSO, SERIE, TURMA, MATRICULA, FALTA
> TabelaD - REGISTRO, NOME
> 
> Select  A.CURSO, A.SERIE, A.TURMA, A.MATRICULA, B.NOTA, C.FALTA, D.NOME
>>From  TabelaA A, TabelaB B, TabelaC C, TabelaD D
> Where (A.CURSO             =  B.CURSO)           And
>            (A.SERIE                =  B.SERIE)              And
>            (A.TURMA             =  B.TURMA)          And
>            (A.MATRICULA    =  B.MATRICULA) And
>            (C.CURSO             =  B.CURSO)           And
>            (C.SERIE                =  B.SERIE)              And
>            (C.TURMA             =  B.TURMA)          And
>            (C.MATRICULA    =  B.MATRICULA) And
>            (A.REGISTRO        =  D.REGISTRO   )
> Order By A.MATRICULA
> 
> O problema é que se por acaso o aluno de matricula "X"  não tiver lançamento
> de Falta, por exemplo (TabelaC), ele não traz o registro....
> 
> Preciso que, mesmo que ele não encontre nota (TabelaB) ou Falta (TabelaC)
> ele traga sempre o aluno (mas tem que ter lançamento em pelo menos em uma
> duas tabelas (nota ou falta)
> CURSO   SERIE   TURMA   MATRICULA   NOTA   FALTA  NOME
> 003          001        XXX        X301                   10,0         1
> MARIA
> 003          001        XXX        X302                     9,0
> JOSÉ
> 003          001        XXX        X301                                   2
> PEDRO
> 003          001        XXX        X301                   10,0         1
> JORGE
> 
> Tem como montar um Select assim?!?
> Li sobre Select / Where / Join / Union....mas não encontrei nada parecido...
> Se alguem tiver uma dica, pode me passar, por favor?
> Desde jpa, obrigada!
> Simone
> 
> 
> 
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> 

-- 
Edson de Paulo
Curitiba - PR





Mais detalhes sobre a lista de discussão lista