Ir para conteúdo

Arquivado

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

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

Compartilhar este post


Link para o post
Compartilhar em outros 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.

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.