Ir para conteúdo
Fórum Script Brasil
  • 0

NOT EXISTS


CurtisCraig

Pergunta

Olá pessoa,

Sou novo no forum, e gostaria de tirar uma dúvida. Preciso deletar alguns registros em uma tabela, de modo que tais registros não existam em outras duas.

Estou tentando usar o seguinte código:

Delete from subscribers where soft_bounces > 2 AND NOT EXISTS (SELECT distinct idEmail FROM stats) AND NOT EXISTS (SELECT distinct idEmail FROM openRate)

O problema é que esse código só me retorna um conjunto vazio.

Alguém pode me ajudar?

Obrigado

Editado por Denis Courcy
Tornar o texto mais claro
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Oi, 'CurtisCraig'

Você precisa ter um campo comum nas tabelas para que dê certo.

É necessário correlacionar estes campos com o resultado procurado nas tabelas.

Substitua EXISTS por IN.

Exemplo

Delete from subscribers where soft_bounces > 2 AND 
subscribers.idEmail NOT IN (SELECT distinct idEmail FROM stats) AND 
subscribers.idEmail NOT IN (SELECT distinct idEmail FROM openRate)

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Denis,

Muito obrigado pela resposta.

Tentei fazer um teste com o código que você me passou, executando-o levemente modificado:

Select idEmail from subscribers where soft_bounces > 2 AND

subscribers.idEmail NOT IN (SELECT distinct idEmail FROM stats) AND

subscribers.idEmail NOT IN (SELECT distinct idEmail FROM openRate)

(não consegui colocar o Codebox, deu erro).

O servidor fica um tempão processando, e então retorna uma página em branco, sem resultado nem erro.

Alguma sugestão?

Obrigado,

Erick

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, 'CurtisCraig'

Você disse:

O servidor fica um tempão processando, e então retorna uma página em branco, sem resultado nem erro.
Isto aconteceu porque as tabelas stats e/ou openRate trabalharam em TABLE SCAN (que é uma varredura completa). Ou seja, não há índices nestas tabelas pelo atributo idEmail delas.

O fato de retornar um conjunto vazio pode estar relacionado a não haver, realmente, nenhum registro que corresponda a sua pesquisa.

Nesta caso você está procurando por emails que NÃO existam nas tabelas stats e openRate e que possuam o atributo soft_bounces maior que 2.

Faça testes verificando se encontra resposta em uma e depois em outra tabela.

Assim:

Select idEmail, soft_bounces from subscribers where subscribers.idEmail NOT IN (SELECT distinct idEmail FROM stats)
e depois
Select idEmail, soft_bounces from subscribers where subscribers.idEmail NOT IN (SELECT distinct idEmail FROM openRate)

Verifique se há componentes que satisfaçam o que você procura. Caso não encontre nenhum, ou emcontre em um e não em outro a resposta de conjunto vazio em sua pesquisa inicial foi correta e não há erro em sua lógica.

Link para o comentário
Compartilhar em outros sites

  • 0

Oi Denis,

Executei ambos os códigos e o resultado foi o mesmo: depois de um longo tempo de processamento, uma página em branco. Não é um conjunto vazio, o que seria uma resposta; é uma página em branco, como se tivesse havido um erro no servidor.

Alguma outra luz a jogar nessa questão?

Obrigado pela atenção,

Erick

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...