Estou curioso, existe uma boa maneira de pesquisar todas as colunas para um determinado valor? Para meus propósitos, não precisa ser nada rápido, é apenas uma coisa única e não quero realmente digitar todos os nomes de campos. É exatamente o que farei por enquanto, mas acho que certamente há uma maneira melhor.
Gostaria de transformar isso:
SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val';
nisso:
SELECT * FROM table WHERE * = 'val'
... ou melhor ainda (embora eu duvide muito ...)
SELECT * FROM table WHERE * like '%val%'
Achei isso , que parece meio não muito próximo, mas não estou encontrando nada mais perto:
SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...)
A diferença é que ele pesquisa uma seleção de colunas pelos valores especificados, enquanto eu estou tentando pesquisar TODAS as colunas por um único valor.
Não é importante, porém, como eu disse mais do que tudo, estou apenas curioso
Quanto mais você se aproxima disso, usando
IN
:Você ainda precisa escrever todas as colunas que deseja verificar.
E não é diferente da
OR
expressão que você tem, nem no desempenho nem no contrário. Esta é apenas uma maneira diferente e equivalente de escrever a expressão, com um pouco menos de caracteres.fonte
Você precisa fazer isso em duas etapas, primeiro gere o sql (assumindo que sua tabela seja chamada T no esquema S:
Agora você pode executar essa sequência. Observe que você deve citar o 'a' com extra '. Se você colocar isso por exemplo em um procedimento, poderá preparar e executar a sequência que foi gerada.
Eu testei com:
A consulta gerada onde:
e executar isso resulta em:
fonte
Parece que já faz um ano desde que eu perguntei isso, mas eu tropecei no que parece ser a coisa exata que eu estava procurando! Não é uma instrução SQL, como eu estava antecipando, mas faz o que eu estava querendo.
No MySQL Workbench, você pode clicar com o botão direito do mouse na tabela ou no esquema e escolher Pesquisar Dados da Tabela.
fonte
Tente este:
Isso pressupõe que não há
.
na sua sequência de pesquisa. Se você não pode garantir isso, talvez possa usar um “caractere separador” diferente.fonte
%
ou_
ou qualquer coluna contiver.
A solução mais simples é fazer
A menos que o val seja algo comum na sintaxe sql.
fonte
Tente isto.
CONCAT () é usado para separar os valores da coluna, da mesma forma que aqui você pode separar sua coluna com espaço para especificar o melhor resultado dentro da função e verificar o valor da string separada com espaço e o resultado está na sua mão.
fonte
É possível usar o banco de dados information_schema, basicamente listaremos todas as colunas de uma tabela específica e usaremos GROUP_CONCAT para listá-las como uma linha e depois alimentá-las em uma instrução IN.
Isso retornará uma linha apenas se 'value' estiver presente em todas as colunas.
fonte
if 'value' is present in any of the columns
? Além disso, você pode adicionar um predicado para tipos de string como: `e DATA_TYPE IN ('char', 'varchar')`where 'value' in ('col1,col2,col3…')
.