[firebase-br] RES: Esse SQL é Possível?

Luis luisfirevb em gmail.com
Qua Set 9 15:37:47 -03 2009


Paulo o problema é que não pode ter repetições, pois como expliquei estaria
informando um mesmo registro 5 vezes, em função de ter 5 ocorrências na
tabela filha vinculada. Eu preciso só repetir os dados do registro Pai uma
única vez, independente se ele está no campo da tabPai ou no campo da
tabFilha.

Luis


-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Paulo Sérgo Feix
Enviada em: quarta-feira, 9 de setembro de 2009 15:32
Para: FireBase
Assunto: Re: [firebase-br] Esse SQL é Possível?

Amigo faz assim mesmo e gera um relatorio, master-detail, eu faço assim.





2009/9/9 Luis <luisfirevb em gmail.com>

> Boa tarde, preciso de uma ajuda num SQL.Tenho duas tabelas assim, com
> relacionamento:
> tabPai.cmpID -> tabFilha.cmpIDPai:
>
> tabPai                          tabFilha
> ======                          =========
> cmpID                                   cmpID
> cmpNome                         cmpIDPai
> cmpAreaResponsavel              cmpAreaUtilizadora
>
> É possível, com boa performance, realizar um único SQL para retornar
apenas
> os registros quando a AreaResponsável (tabPai) ou AreaUtilizadora
> (tabFilha)
> forem iguais ao parâmetro passado?
>
> Explicando: O usuário irá selecionar uma área e consultar o banco, então
> terei de trazer todos os registros de tabPai onde a área selecionada
esteja
> presente nos dois campos das duas tabelas.
>
> IMPORTANTE: Não pode trazer o mesmo registro repedido, quando há vários
> itens na tabFilha referente a um único registro na tabPai, somente deve
> retornar um único registro da tabPai (sem repetir os dados para cada
> ocorrência de tabFilha).
>
> Tentei esse código baixo, mas retorna o mesmo registro de tabPai repetido
> para cada ocorrência de tabFilha.
>
> SELECT tabPai.cmpID, tabPai.cmpNome, tabPai.cmpAreaResponsavel FROM tabPai
> RIGHT JOIN tabFilha ON tabPai.cmpID = tabFilha.cmpIDPai
> WHERE (((tabFilha.cmpAreaUtilizadora)=7)) OR
> (((tabPai.cmpAreaResponsavel)=7));
>
> Exemplo dos dados na tabela:
>
> tabPai
> cmdID = 1       - cmpNome = Luis        - cmpAreaResponsavel = 3
> cmdID = 2       - cmpNome = André       - cmpAreaResponsavel = 7
> cmdID = 3       - cmpNome = Márcia - cmpAreaResponsavel = 10
>
> tabFilha
> cmpID = 1       - cmpIDPai = 2  - cmpAreaUtilizadora = 2
> cmpID = 2       - cmpIDPai = 2  - cmpAreaUtilizadora = 20
> cmpID = 3       - cmpIDPai = 2  - cmpAreaUtilizadora = 13
> cmpID = 4       - cmpIDPai = 2  - cmpAreaUtilizadora = 15
> cmpID = 5       - cmpIDPai = 2  - cmpAreaUtilizadora = 16
> cmpID = 6       - cmpIDPai = 1  - cmpAreaUtilizadora = 10
> cmpID = 7       - cmpIDPai = 1  - cmpAreaUtilizadora = 7
> cmpID = 8       - cmpIDPai = 3  - cmpAreaUtilizadora = 15
>
> Então os dados retornados deveriam ser apenas:
> tabPai.cmdID = 1        - tabPai.cmpNome = Luis  -
> tabPai.cmpAreaResponsavel
> = 3  - tabFilha.cmpAreaUtilizadora = 7
> tabPai.cmdID = 2        - tabPai.cmpNome = André -
> tabPai.cmpAreaResponsavel
> = 7  - tabFilha.cmpAreaUtilizadora = 20
>
> Reparem:
> A Consulta retornaria apenas os 2 primeiros registros de tabPai, pois no
ID
> 1 a área selecionada corresponde a AreaUtilizadora na tabFilha, já no ID 2
> corresponde a AreaResponsavel de tabPai mesmo, o ID 3 não tem nenhum
> correlação. Também só trouxe uma vez o registro Pai ID = 2, apesar de ter
> várias correlações na tabFilha.
>
> ISSO é Possível?
>
> Como?
>
> Obrigado
> Luis
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>



-- 
Paulinho Sérgio Feix
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para saber como gerenciar/excluir seu cadastro na lista, use:
http://www.firebase.com.br/fb/artigo.php?id=1107
Para consultar mensagens antigas: http://firebase.com.br/pesquisa





Mais detalhes sobre a lista de discussão lista