mysql - 显示存在值的表名

标签 mysql database

是否可以在存在特定值的数据库中显示表的名称。我有不同的表,我只想显示在任何字段中包含特定值的表名。

最佳答案

这将返回大量空结果集,但非空结果集对应于适合您的搜索的表/列组合。它仅适用于文本,并检测包含值的列(与完整列匹配相反)。

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/

相关文章:

mysql - SQL - 从 3 个表中检索结果并按日期排序

php - 我需要更新连接两个不同表的表。此查询是否合适?

mysql - 如何将数据从一个 SQL 列表复制到另一个 SQL 列表

python - Django QuerySet 用子查询注释

php - 从 MYSQL 创建数组 'datetime' 年可用

Mysql为每个用户单独的表。 (用户每月输入数据,这些数据应该放在单独的表中)

php - 如何使用 Codeigniter 互连三个 mysql 表

django - 数据库级别的 Django 一对一关系和外键关系之间的区别?

java - 从 Oracle 数据库检索 Java 代码中自动生成的 ID

php - 阻止域提交并添加到数据库