Ir para conteúdo

POWERED BY:

Arquivado

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

Leandro Braçaroto

Comparar dois retornos de select e inserir os diferentes

Recommended Posts

Boa tarde PessoalEstou precisando comparar os resultados de dois selects.o meu caso é permissão, onde eu puxo todas as permissões do sistemaSELECT funcionalidade FROM permissao WHERE situacao = 'FIXO'depois eu preciso verificar se falta algum registro do listado acima em algum outro usuário/grupo, ou seja, eu seleciono todos os usuários que não tem determinada funcionalidadeSELECT * FROM permissao WHERE funcionalidade <> ?????teria como fazer algo mais ou menos assim?SELECT * FROM permissao WHERE funcionalidade <> SELECT funcionalidade FROM permissao WHERE situacao = 'FIXO'claro esse jeito não funciona né :D:Ddepois eu queria fazer um insert das funcionalidades novas para esses usuários/grupos :)os campos do banco são:permissaoId grupoIdusuarioIdacesso (S/N)situacaofuncionalidadedesde já agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eclesiastes, obrigado pela ajuda....só para mim entenderSELECT funcionalidade FROM permissao WHERE EXISTS (SELECT funcionalidade FROM permissao WHERE situacao = 'FIXO')desta forma ele vai buscar todos campos da tabela permissão que existirem no segundo select?o que eu preciso seria, pegar todas as opções e comparar com o primeiro select, porque no segundo select será exibido todas as permissões... e no primeiro select eu quero ver se todos os usuários tem essas opções ou se falta alguma, como se fosse um confronto de usuários....ou tem alguma outra forma de fazer isso? porque do jeito que está acima está puxando todos os registros...desde já agradeço

Compartilhar este post


Link para o post
Compartilhar em outros sites

se eu conseguir descobrir o porque não está aparecendo registros nesse select eu creio que funcioneSELECT permissaoId, funcionalidade FROM permissao WHERE situacao = 'FIXO' AND NOT EXISTS (SELECT DISTINCT funcionalidade FROM permissao WHERE situacao <> 'FIXO')quero que pegue as funcionalidades com a situação FIXO ( que são as configurações padrões ) que não exista nos outros registros ( todos os usuários, grupos etc )depois que listar tenho que fazer um insert dessas funcionalidades em todos os usuários, grupos etc...mas não está exibindo nada no meu select acima...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que comparar na subquery usando alguma informação da query principal.

 

Por exemplo, selecionar os registros da tabela "funcionarios" que não existe na tabela "demitidos":

SELECT * FROM funcionarios func WHERE NOT EXISTS (SELECT 1 FROM demitidos WHERE nr_funcionario = func.nr_funcionario)

Entendeu? Subquery correlata! ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que comparar na subquery usando alguma informação da query principal.Por exemplo, selecionar os registros da tabela "funcionarios" que não existe na tabela "demitidos":

SELECT * FROM funcionarios func WHERE NOT EXISTS (SELECT 1 FROM demitidos WHERE nr_funcionario = func.nr_funcionario)
Entendeu? Subquery correlata! ;)
certo Eclesiastes, mas não tem como fazer isto de uma mesma tabela?eu não consegui encaixar isto no que preciso ainda =//SELECT permissaoId, funcionalidade FROM permissao WHERE situacao = 'FIXO' AND NOT EXISTS (SELECT DISTINCT funcionalidade FROM permissao WHERE situacao <> 'FIXO')quero pegar no primeiro select todas as funcionalidades onde a situação é = FIXO que são as funcionalidades padrões para controle.no segundo select quero comparar se todas as funcionalidades do primeiro select existe no segundo, mas esse segundo não pode ser os de situação = FIXO é claro.tem alguma idéia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você tem que comparar na subquery usando alguma informação da query principal.Por exemplo, selecionar os registros da tabela "funcionarios" que não existe na tabela "demitidos":

SELECT * FROM funcionarios func WHERE NOT EXISTS (SELECT 1 FROM demitidos WHERE nr_funcionario = func.nr_funcionario)
Entendeu? Subquery correlata! ;)
certo Eclesiastes, mas não tem como fazer isto de uma mesma tabela?eu não consegui encaixar isto no que preciso ainda =//SELECT permissaoId, funcionalidade FROM permissao WHERE situacao = 'FIXO' AND NOT EXISTS (SELECT DISTINCT funcionalidade FROM permissao WHERE situacao <> 'FIXO')quero pegar no primeiro select todas as funcionalidades onde a situação é = FIXO que são as funcionalidades padrões para controle.no segundo select quero comparar se todas as funcionalidades do primeiro select existe no segundo, mas esse segundo não pode ser os de situação = FIXO é claro.tem alguma idéia?
Olá,na verdade, Leandro, você tem q colocar a condição (...situacao= 'FIXO') no subselect, pois ele é quem vai filtrar. Eu sempre vou de dentro pra fora.Uma segunda condicao necessaria é justamente comparar o que você quer. Seria como testar manualmente cada campo com o seu correspondente (seria algo como ...where t1.campo1 = t2.campo1 and t1.campo2 = t2.campo2 and... mas ñ vá fazer isso, deve haver outro jeito)tudo num outro subselect... lembre-se q cada subselect querbra a consulta em partes menores para que facilite a contrucao de consulta mais global.procure ir de dentro pra fora... veja esse codigo que pega as companhias q realizam voos em todos os modelos de avioes... quase o inverso do que você quer, segundo o q entendi:SELECT c.COD_COMP, c.NOM_COMP FROM companhias cwhere not exists (select 1 from tipos_avioeswhere cod_tpo <> all (select tipo_v from voo where voo.cod_comp = c.cod_comp))faça isso em conjunto com a dica anterior do subquery correlato espero q isso ajude

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal... ontem consegui fazer esta rotina... não fiz comparação de selects não...

 

fiz assim:

 

primeiro puxei todos os grupos, depois fiz um while e fui inserindo o novo registro em cada grupo.

depois puxei as pessoas e também fiz um while e fui inserindo o novo registro para cada pessoa.

 

Não sei como não tinha pensado nisto antes hahahha...

 

Abraços.

Valeu Moçada.

 

Visitem:

www.leandrobracaroto.com

 

Leandro Braçaroto

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.