[firebase-br] Esse SQL é Possível?
Luis
luisfirevb em gmail.com
Qua Set 9 15:17:55 -03 2009
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
Mais detalhes sobre a lista de discussão lista