Página 1 de 1

QUERY RETORNAR DADOS NO EXISTS

Enviado: Sex, 18 Dez 2015 6:13 pm
por Moloukos
Boa tarde.

Gostaria da ajuda de vocês na query abaixo:

Selecionar tudo

 SELECT C.*
        FROM TB_CENTRAL C
       WHERE EXISTS (SELECT DISTINCT 1
                                FROM TB_INTERMEDIARIA I
                              WHERE I.ID_ETA IN (16,24)
                                   AND I.ID = C.ID)
Existe alguma forma ou função que so retorno os dados caso os dois registros do in (16 e 24) existirem na tabela tb_intermediaria. Porque nesse caso se eu informar somente o 16 os dados já são retornados.
Exemplo:

Selecionar tudo

 SELECT C.*
        FROM TB_CENTRAL C
       WHERE EXISTS (SELECT DISTINCT 1
                                FROM TB_INTERMEDIARIA I
                              WHERE I.ID_ETA IN (16)
                                   AND I.ID = C.ID)
O que preciso é somente retornar dados se os dois registros realmente existirem na tabela....

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Sex, 18 Dez 2015 10:13 pm
por tiago_pimenta
Precisa necessariamente usar o IN ?

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Seg, 21 Dez 2015 7:41 am
por stcoutinho
Moloukos,

Você poderia fazer uma querie parecida com esta:

Selecionar tudo

SELECT C.*
  FROM TB_CENTRAL C
 WHERE EXISTS (SELECT 1
                 FROM TB_INTERMEDIARIA I
                WHERE I.ID_ETA =  16
                  AND I.ID = C.ID)
   AND EXISTS (SELECT 1
                 FROM TB_INTERMEDIARIA I
                WHERE I.ID_ETA =  24
                  AND I.ID = C.ID)
Abraços,

Sergio

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Seg, 21 Dez 2015 9:33 am
por Moloukos
Tiago,

Não preciso necessariamente usar o in, mas preciso saber se os valores passados estão exatamente iguais aos cadastrados no banco.

Recebo uma string com os valores 12, 5 , 33 --- Esses valores podem ser alterados em cada query.
Na próxima posso receber 5, 33

E tenho que ir na tabela e validar se esta exatamente igual ao cadastrado.
As linhas na tabela estão assim para o registro 1 :

Selecionar tudo

TB_INTERMEDIARIA id = 1 , ID_ETA = 5
TB_INTERMEDIARIA id = 1 , ID_ETA = 33

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Seg, 21 Dez 2015 9:36 am
por Moloukos
Sérgio,

Dessa maneira eu tenho um problema porque a string que recebo é dinâmica.

Posso receber na primeira chamada 12, 5, 33
Na segunda chamada 5, 33

Ai teria que montar dinamicamente a quantidade de exists da maneira que você passou para montar a query.

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Qua, 20 Jan 2016 12:27 pm
por dr_gori
É, acho que se sua string é dinâmica, o melhor a fazer é uma cláusula WHERE dinâmica. Mas de preferência, usando BINDS no sql dinâmico.

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Qui, 21 Jan 2016 10:01 am
por stcoutinho
Moloukos,

Só lembrando que dentro de um "IN" você só pode "aninhar" até 1000 elementos. Se forem mais de 1.000 você vai ter que colocar as listas em vários comandos IN, cada um deles contendo até 1.000 elementos.

Abraços,

Sergio

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Qui, 18 Fev 2016 8:33 am
por juliocpgr
Bom dia amigos.

Caro Moloukos,

Se você ainda estiver precisando de ajuda (apesar do tempo), a resposta é SIM.

Sua situação pode ser resolvida facilmente utilizando a cláusula "=ALL".

Exemplo:

Selecionar tudo

 select * 
     from tabela 
   where campo   =ALL  (1,2,3,4) 
Neste caso, a consulta resultará dados apenas se todos valores da lista (1,2,3,4) estiverem no campo.

Além do ALL, existem outras condições de comparações, como o ANY e SOME.

Abraço.
Júlio César

Re: QUERY RETORNAR DADOS NO EXISTS

Enviado: Sex, 01 Abr 2016 6:13 pm
por Moloukos
Júlio, obrigado pelo retorno.

Vou utilizar nas próximas implementações.