Página 1 de 1

Validar se todos os valores da cláusula "in" existem

Enviado: Seg, 29 Ago 2022 6:57 pm
por tiagoss
Tenho um sql que estou comparando valores dentro de uma cláusula "in" e só devo retornar se todos existirem. Exemplo:

Selecionar tudo

select * 
from teste
where campo1 in  ('AAA', 'BBB', ''CCC', 'DDD');
Na tabela "teste" campo "campo1" não tenho o valor ''CCC'. Então não devo trazer nenhum resultado.

Selecionar tudo

select * 
from teste
where campo1 in  ('AAA', 'BBB', 'DDD');
Na tabela "teste" campo "campo1" tenho 'AAA', 'BBB', 'DDD'. Então devo trazer os 3 resultados.

Possui algum função no oracle se todos os valores da cláusula "in" existem?

Re: Validar se todos os valores da cláusula "in" existem

Enviado: Ter, 30 Ago 2022 4:02 pm
por dr_gori
Dá pra fazer assim:

Selecionar tudo

select * 
from teste
where campo1 in  ('AAA', 'BBB', ''CCC', 'DDD')
  and exists (select 1 from teste where campo1='AAA')
  and exists (select 1 from teste where campo1='BBB')
  and exists (select 1 from teste where campo1='CCC')
  and exists (select 1 from teste where campo1='DDD')
Neste caso, ele vai trazer todas essas linhas, caso TODAS existam.

Já no exemplo abaixo, ele não vai trazer nenhuma linha, pois NNN não existe.

Selecionar tudo

select * 
from teste
where campo1 in  ('AAA', 'BBB', ''CCC', 'DDD')
  and exists (select 1 from teste where campo1='AAA')
  and exists (select 1 from teste where campo1='BBB')
  and exists (select 1 from teste where campo1='CCC')
  and exists (select 1 from teste where campo1='NNN')

Re: Validar se todos os valores da cláusula "in" existem

Enviado: Sáb, 03 Set 2022 3:52 pm
por tiago_pimenta
Precisa mesmo ser com a cláusula "IN" ??? Pois a clausula "IN" faz justamente isso, traz resultado se tiver pelo menos 1 condição válida !!!

Re: Validar se todos os valores da cláusula "in" existem

Enviado: Seg, 05 Set 2022 7:52 pm
por dr_gori
A cláusula IN vai trazer as linhas que existirem dentro da cláusula IN.
Você pode ter 10 valores dentro da cláusula IN, e se na tabela só tiver 1, ele vai trazer esse 1.

O que ele quer é:
só devo retornar se todos existirem.
Por isso o EXISTS. Faça o teste!

Re: Validar se todos os valores da cláusula "in" existem

Enviado: Seg, 12 Set 2022 9:47 am
por tiago_pimenta
Exatamente dr_gori, por isso perguntei se necessariamente tinha que ser com a clausula "IN"