是否可以在存在特定值的数据库中显示表的名称。我有不同的表,我只想显示在任何字段中包含特定值的表名。
最佳答案
这将返回大量空结果集,但非空结果集对应于适合您的搜索的表/列组合。它仅适用于文本,并检测包含值的列(与完整列匹配相反)。
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 ;
哦,是的,它很丑……不过也许它会对你有所帮助!
关于mysql - 显示存在值的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750469/