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

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
tiagoss
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 1
Registrado em: Seg, 29 Ago 2022 6:44 pm
Localização: Porto Alegre

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?
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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')
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

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 !!!
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

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!
Avatar do usuário
tiago_pimenta
Rank: DBA Júnior
Rank: DBA Júnior
Mensagens: 213
Registrado em: Qua, 29 Jun 2011 9:49 am
Localização: Barretos / SP

Exatamente dr_gori, por isso perguntei se necessariamente tinha que ser com a clausula "IN"
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 37 visitantes