Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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.
Veja se ajuda
http://forum.imasters.com.br/topic/476094-trazer-dois-campos-iguais-numa-consulta/
Veja também
http://forum.imasters.com.br/topic/475485-mysql-if/page__view__findpost__p__1889341