Jump to content
Sign in to follow this  
hyperpixel

montagem de query com relacionamento nao traz resultado esperado

Recommended Posts

depois de uma duvida que me tomou domingo venho aqui pedir ajuda, para montar uma query, duvida no relacionamento nao aparece resultado certo;

 

tenho tab a

 

com campos id, nome

id nome
1  jose
2  mario 
3  paula
4  amanda
5  fernanda
6  felix

 

 

relacionamento

 

se as pessoas estao no mesmo setor; tab b

id id_outro
2  3 
4  2  

 

preciso mostrar para o id = 2, por exemplo pessoas da tabela a que nao estejam relacionadas com ele, uma alusao por exemplo seria dar sugestão de amigos p quem ja e amigo, se o id = 4 entra so mostrar o id=1, id=3, id=4, id=5... se o id = 2 entra mostrar todos menos 3, 4, pois ja esta relacionado com 3 e 4, tentei join, subquery, not null, in enfim um monte de caminhos mas nao deu certo alguem tem alguma dica ou ideia de como monto consulta

 

estou estudando algebra relacional talvez me ajuda resolver problemas assim

 

grato

Share this post


Link to post
Share on other sites

Olá hyperpixel,

 

Isso você pode resolver com uma query simples, basta você utilizar a função exists ou in, neste caso negando elas assim:

select a.id
  from tab_A a
where a.id = 2 --Informar id para consulta, será exibido ids não relacionados ainda
  and not exists(select 1
                   from tab_B b
                  where b.id_outro = a.id)

Ou

select a.id
  from tab_A a
where a.id = 2 --Informar id para consulta, será exibido ids não relacionados ainda
  and a.id not in (select b.id_outro
                     from tab_B b)

A diferença entre as query's está no conceito do agregação e composição, a 1ª é uma composição, a subquery não existe sozinha, ou seja, o todo existe sem a parte, mas a parte não existe sem o todo, já a segunda uma agregação, a parte existe sem o todo e o todo existe sem a parte. Outra diferença é em performance, pois a 2ª traz todos os registros da tab_B para depois analisar a negação, um problema caso a tab_B possua muitos registros.

Edited by Leonardo Brito

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.