Es posible mostrar el nombre de una tabla en un db donde hay un valor específico presente. Tengo diferentes tablas y quiero mostrar solo los nombres de las tablas que contienen un valor específico en cualquiera de los campos.Mostrar el nombre de la tabla donde está presente un valor
Respuesta
Esto devolverá un montón de conjuntos de resultados vacíos, pero los que no estén vacíos corresponden a las combinaciones de la tabla/columna que se ajustan a su búsqueda. Sólo funciona para el texto, y detecta las columnas que contienen el valor (en oposición a un partido de la columna completa.)
DELIMITER |
DROP PROCEDURE IF EXISTS `SearchAllTables`|
CREATE PROCEDURE `SearchAllTables` (
IN _search varchar(256)
)
LANGUAGE SQL
DETERMINISTIC
SQL SECURITY DEFINER
BEGIN
-- declare stuff
declare _tableName varchar(64);
declare _columnName varchar(64);
declare _done tinyint(1) default 0;
-- we will examine every string column in the database
declare _columnCursor cursor for
select TABLE_NAME, COLUMN_NAME
from INFORMATION_SCHEMA.COLUMNS
where TABLE_SCHEMA = database()
and (DATA_TYPE like '%char%'
or DATA_TYPE like 'text');
declare CONTINUE handler for NOT FOUND
SET _done = 1;
OPEN _columnCursor;
LOOP1: LOOP
-- get the next table/column combination
FETCH _columnCursor INTO _tableName,_columnName;
IF _done = 1 THEN
CLOSE _columnCursor;
LEAVE LOOP1;
END IF;
-- query the current column to see if it holds the value
SET @query = concat(
"select '",_tableName,"' as TableName, '",
_columnName,"' as ColumnName
from ",_tableName,"
where ",_columnName," like concat('%',?,'%')
group by 1;"
);
SET @search = _search;
PREPARE _stmt FROM @query;
EXECUTE _stmt USING @search;
DEALLOCATE PREPARE _stmt;
END LOOP LOOP1;
END|
DELIMITER ;
Oh, sí, y es feo ... Tal vez él le ayudará, sin embargo!
es feo, pero creo que es la única forma de hacerlo y podría ser útil. +1 – Icarus
¿cómo lo implementaría en mi página php? lo siento esta es una consulta SQL? – SebastianOpperman
@SebastianOpperman: Este script crea un procedimiento almacenado (que por cierto requiere mysql 5). Tendrá que ejecutarlo una vez (a través del cliente mysql o phpMyAdmin) para crear el procedimiento, luego tendrá que llamar al procedimiento de tu script php. Si nunca trabajó con consultas que devuelven resultados múltiples, también puede consultar [esta pregunta] (http://stackoverflow.com/questions/1683794/retrieving-multiple-result-sets-sets-with-stored-procedure-in -php-mysqli). – grossvogel
SELECT TABLE_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
AND COLUMN_NAME = 'column_name'
Hola, no sé los nombres de las tablas. Básicamente, quiero una consulta que busque en todas las tablas un 'valor' y muestre los nombres de las tablas donde ese 'valor' existe. – SebastianOpperman
- 1. Seleccionar entidad donde la asociación Hibernate OneToOne no está presente
- 2. Cómo verificar si un valor de matriz profunda está presente
- 3. tablas de unión MySQL donde el nombre de la tabla es un campo de otra tabla
- 4. Linq Donde el valor está en Array
- 5. para acceder a un valor del ámbito de aplicación externa cuando un miembro local con el mismo nombre está presente
- 6. Usando mysqlimport donde el nombre del archivo es diferente al nombre de la tabla
- 7. Cómo cambiar el valor si la tabla ya está dibujada
- 8. XSLT valor de variable predeterminado si el valor no está presente
- 9. Eliminar el registro principal si el hijo no está presente
- 10. Cómo detectar si un micrófono está presente
- 11. SQLAlchemy: compruebe si el objeto ya está presente en la tabla
- 12. Jquery encuentra la celda de la tabla donde el valor es X
- 13. ¿Cómo verificar si el valor específico está presente en un hash?
- 14. Servidor SQL - ¿Tabla de ACTUALIZACIÓN donde ID está en SELECCIONAR?
- 15. Compruebe si la consola está presente
- 16. rieles validar que password_confirmation está presente cuando la contraseña también está presente o se ha cambiado
- 17. Habilitar onContextMenu cuando está presente
- 18. skip_before_filter cuando api_key está presente
- 19. Rieles: ¿cómo validar el formato solo si el valor está presente?
- 20. nodo de retorno si la relación no está presente
- 21. En SQL, ¿cómo obtengo todas las filas donde el valor de una columna es el más bajo en la tabla?
- 22. Mostrar el nombre de la tabla en la instrucción de selección
- 23. El recurso de mensaje está presente pero el mensaje no se encuentra en la tabla de cadena/mensaje
- 24. Seleccione el número de días que un registro está presente dentro de un determinado año/mes
- 25. XPath para encontrar atributos donde el nombre comienza con un valor dado
- 26. Agregar columna adicional para ver, que no está presente en la tabla
- 27. cómo detectar si el modo de acción ya está presente
- 28. primavera @Valor anotación no usar por defecto cuando la propiedad no está presente
- 29. DataGridViewComboBoxColumn nombre/valor ¿cómo?
- 30. Cómo seleccionar de MySQL, donde Nombre de la tabla es variable
Sí, es perfectamente posible, tengo algunos en mi caja de herramientas personal, por ejemplo, buscar una fecha, cadena y valores decimales, etc. pero utiliza tablas internas de DB y poco lento, ya que ejecuta cursores sobre cada columna de tabla, pero luego viene personas quejándose acerca de por qué está en SQL Server o por qué selecciona las tablas del sistema. –
¿Es necesario que sea lo suficientemente flexible para trabajar con los tipos de datos, o solo texto, o qué? ¿Tiene que coincidir todo el valor de la columna? – grossvogel
Básicamente busca el número de identificación de una persona. Si lo encuentra en decir 3 de las 5 tablas. Muestra el nombre de esas 3 tablas – SebastianOpperman