Ir ao conteúdo

DELETE com if mysql


morvy

Posts recomendados

Postado

Olá,

 

Estou fazendo um sistema no qual gostaria de deletar todos os insumos do meu banco de dados menos os que tem EMPREITA no nome, estou executando esta query, mas está dando erro, não faço ideia da lógica a se usar.

Delete From insumo Where (Select if insumo.nome != %EMPREITA%)

 

Alguem tem alguma ideia?

  • Moderador
Postado

Ola,

 

Precisa ser deste jeito?

 

Tente desta forma:

Delete From insumo Where nome NOT LIKE '%EMPREITA%' 

ou talvez este:

Delete From insumo Where nome <> 'EMPREITA'

Quando se quer usar a diferença  no mysql  deve se usar o sinal <>   ao invés do !=

Postado

Hum... Se não me engano o erro está na falta dos ', outra coisa, meu banco está com 15 mil resultados, será que ele vai ter um travamento na hora de selecionar por exemplo, determinado nomes?

  • Moderador
Postado

Acredito que não.  

mesmo que um banco de dados tenha 1 milhao de dados... se não houver algo que faça um loop infinito não tem porque travar.

Se fosse assim o banco de dados do facebook travaria sempre :)

Postado

Ola,

Precisa ser deste jeito?

Tente desta forma:

Delete From insumo Where nome like '%EMPREITA%' 
Cuidado, assim ira fazer exatamente o contrário da sua vontade.

você deverá adicionar a palavra NOT antes de like.

delete from insumo where nome not like '%empreita%'
Pense q esse comando vai ler cada linha do seu banco de dados, se na coluna nome da linha que ele estiver lendo nao existir a palavra EMPREITA ele irá apagar essa linha.

O mais certo a fazer também, e de se observar é que EMPREITA é diferente de empreita, ou seja, se seu banco for case sensitive ele ira deletar, empreita, Empreita, EMpreita, EmpReita, etc etc.

Nesse caso se forem todas palavras empreita sem exceção você deverá usar uma função pra levantar as palavras.

Ex: No oracle o comando é upper se não me engano.

O que ele faz é transformar todas palavras em maiusculo, depois comparar com uma palavra em maiusculo.

Att,

  • Moderador
Postado

@emailpublico3,

Não necessariamente.

Eu levei em consideração que quando o cara for fazer o cadastro SEMPRE deverá estar em minusculo ou maiúsculo( tratando a string via linguagem de programação)  assim nunca ocorrerá inconsistência.

Particularmente eu prefiro tratar antes de inserir no banco.. mas há quem gosta de tratar no momento da consulta.

 

Outra coisa, é sem sentido ter o registro com o campo "nome" vazio NESTE caso. Por fim, não estamos falando de oracle. mas sim de MySQL. 

Postado

Não critiquei sua resposta.

Eu apenas expliquei para ter cuidado, pois a palavra "empreita" escrito por diversos modos, como combinações miusculas e/ou minusculas poderão implicar no resultado final de um delete, que pode dar dor de cabeça.

Não estou impondo uma forma de fazer, estou dando uma dica.

 

Quando mencionei você, disse que o que foi proposto, por você, era exatamente ao contrario do que ele queria.

"menos os que tem EMPREITA"

Delete From insumo Where nome like '%EMPREITA%' 
  • Moderador
Postado

 

Não critiquei sua resposta.

Eu apenas expliquei para ter cuidado, pois a palavra "empreita" escrito por diversos modos, como combinações miusculas e/ou minusculas poderão implicar no resultado final de um delete, que pode dar dor de cabeça.

Não estou impondo uma forma de fazer, estou dando uma dica.

 

Quando mencionei você, disse que o que foi proposto, por você, era exatamente ao contrario do que ele queria.

"menos os que tem EMPREITA"

Delete From insumo Where nome like '%EMPREITA%' 

 

Foi por que eu esqueci de colocar o not. e fiquei com preguiça de alterar depois.. mas já atualizei e acrescentei uma alternativa porque realmente não gosto de usar o like em alguns casos. além do mais quando escrevi a resposta estava com pressa..  agora vamos esperar o autor se pronunciar.

Postado

como o @emailpublico3 Falou, cuidado com a cláusula do Delete, pois em 99% dos bancos mysql, não há tratamento sensitivo, ou seja, não existe diferença alguma em fazer DELETE NOME = "DOG" ou DELETE NOME = "dog"

 

@dif disse: "Quando se quer usar a diferença  no mysql  deve se usar o sinal <>   ao invés do !="

 

Não entendi o porque dessa afirmação, sempre tive preferência por "!=" ao invés de qualquer outro sinal que indique "diferente"

Arquivado

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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!