我正在搜索一个要通过PhpMyAdmin运行的SQL查询,以便在数据库的所有表中查找包含给定字符串的所有记录。到目前为止,我找到的只是一个查询:
SELECT * FROM information_schema.`COLUMNS` C WHERE TABLE_SCHEMA = 'final_year_project_demo'这将返回模式中的所有表,但我在SQL中的效率不高,因此不能再往下移动。
所有我需要的是一个查询,将列出所有记录(在任何列中包含一个特定的字符串),从所有的表是通过上述代码列出的。所有表中的列都相同。
发布于 2014-05-13 05:48:42
这是一件有点复杂的事情。而且你真的不能一步到位。我会给你一些开始的东西,你必须从那里开始:
select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME="user_id";现在,这将产生如下输出:
+--------------------------------------------------------------------+
| CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;") |
+--------------------------------------------------------------------+
| SELECT * FROM table0 WHERE user_id=1; |
| SELECT * FROM table1 WHERE user_id=1; |现在,您想要转过身来执行所有这些命令...所以你可以这样做:
select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME="user_id" INTO OUTFILE "some_file_path_and_name";这将为您提供一个文本文件,其中包含您正在查找的所有命令。
更新
我错过了"For any column bit..“
select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE ", COLUMN_NAME, "='WHATEVER';") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLLATION_NAME IS NOT NULL INTO OUTFILE 'somepath';在这里,我们使用的事实是,您说您正在查找一个字符串,并且所有的字符串类型字段都有一个collation_name。将任何内容替换为您要查找的内容。
https://stackoverflow.com/questions/23618727
复制相似问题