Tengo curiosidad, ¿hay una buena manera de buscar en todas las columnas un valor dado? Para mis propósitos, no es necesario que sea rápido, es solo una cosa única, y realmente no quiero tener que escribir cada nombre de campo. Eso es precisamente lo que haré por ahora, pero creo que seguramente hay una mejor manera.
Me gustaría convertir esto:
SELECT * FROM table WHERE col1 = 'val' OR col2 = 'val' OR col3 = 'val';
dentro de esto:
SELECT * FROM table WHERE * = 'val'
... o, mejor aún (aunque lo dudo seriamente ...)
SELECT * FROM table WHERE * like '%val%'
Encontré esto , que parece un poco no muy cerca, pero no encuentro nada más cerca:
SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...)
La diferencia es que busca en una selección de columnas los valores especificados, mientras que estoy tratando de buscar en TODAS las columnas un solo valor.
Sin embargo, no es importante, como dije más que nada, solo tengo curiosidad
Lo más cerca que puede acercarse es esto, usando
IN
:Todavía tiene que escribir todas las columnas que desea verificar.
Y no es diferente de la
OR
expresión que tiene, ni en el rendimiento ni de otra manera. Esta es solo una forma diferente y equivalente de escribir la expresión, con un poco menos de caracteres.fuente
Debe hacerlo en dos pasos, primero genere el sql like (suponiendo que su tabla se llame T en el esquema S:
Ahora puedes ejecutar esta cadena. Tenga en cuenta que debe citar la 'a' con extra '. Si pone esto, por ejemplo, en un procedimiento, puede preparar y ejecutar la cadena que se generó.
Probé con:
La consulta generada donde:
y ejecutar eso da como resultado:
fuente
¡Parece que ha pasado un año desde que pregunté esto, pero me topé con lo que parece ser exactamente lo que estaba buscando! No es una declaración SQL, como estaba anticipando, pero HACE lo que quería.
En MySQL Workbench, puede hacer clic con el botón derecho en la tabla o el esquema y elegir Buscar datos de tabla.
fuente
Prueba este:
Esto supone que no hay
.
en su cadena de búsqueda. Si no puede garantizarlo, tal vez pueda usar un "carácter separador" diferente.fuente
%
o_
alguna columna contiene.
La solución más simple es hacer
A menos que el val sea algo que sea una ocurrencia común en la sintaxis sql.
fuente
Prueba esto.
CONCAT () se usa para separar los valores de columna de la misma manera que aquí puede separar su columna con espacio para especificar el mejor resultado dentro de la función y verificar el valor también separó la cadena con espacio y el resultado está en su mano.
fuente
Es posible mediante el uso de la base de datos information_schema, básicamente solo enumeraremos todas las columnas de una tabla específica, luego usaremos GROUP_CONCAT para enumerarlas como una línea y luego alimentarlas en una declaración IN.
Esto solo devolverá una fila si el 'valor' está presente en todas las columnas.
fuente
if 'value' is present in any of the columns
? Además, puede agregar un predicado para tipos de cadena como: `y DATA_TYPE IN ('char', 'varchar')`where 'value' in ('col1,col2,col3…')
.