Olá.
Não tenho experiência com banco de dados, mas agora tenho que mexer.
Tenho uma tabela MySQL chamada foo. Selecionei todos os campos existentes:
Criei uma consulta em função do campo id:
Em algum momento, esse “n” pode ser = 0. Como não existe id = 0 na tabela, o retorno é vazio.
Como fazer com que a query retorne todos os campos da tabela SOMENTE quando ‘%n%’ = 0 ?
Eu pensei nos comandos IF e WHEN, mas tive problemas de sintaxe quando os utilizei.
Alguém pode dar uma ideia ou exemplo?
LIKE 430 quer dizer que se seu ID for 04301, 14302, 000430 etc. ele tem de retornar esses valores? Que esquisito.
Bem pensado, entanglement.
Não, se os ids forem como estes que você citou(quando existe ‘0’ no id) então a consulta deve retornar o registro em questão.
Quero levar em conta apenas um caso: quando id = 0(nada mais). Como posso filtrar desta forma?
Retornar todos os campos quando id = 0?
SELECT col1, col2, col3, col4, colN FROM foo where id = '0';
Isso faz o que você quer.
Todos os campos quando id != 0
SELECT col1, col2, col3, col4, colN FROM foo where id <> '0';
Ah, não use “SELECT *”, isso onera demais o banco. Prefira o select como eu orientei, sempre indicando quais colunas deseja retornar na consulta.
Valeu drsmachado, não tinha pensado nisso. Estes dois exemplos me servirão muito bem!
Obrigado à todos!
E a respeito do LIKE, ele é utilizado em cláusulas onde a pesquisa será feita em uma coluna cujo valor pode ser “parecido”. Aliás, eu prefiro que meus IDs e chaves primárias sejam de tipos numéricos, geralmente bigint ou big decimal.
De modo geral, usar LIKE (principalmente esse que tem um “%” no começo e no fim da string) “mata” a sua aplicação.
É que normalmente ele é convertido para um “table scan”.
(Alguns bancos SQL convertem o “LIKE” que tem o “%” no fim apenas, para um “BETWEEN”, e isso é um pouco mais rápido, já que pode aproveitar eventuais índices que existam nessa coluna.)
Se você precisa fazer algo parecido com isso em um banco pequeno, com um milhão de registros, sua consulta vai ficar extremamente lenta (você precisa usar a solução de “full text search” do seu banco). Dentro da medida do possível, evite usar LIKE a torto e a direito.