Mysql 使用多个表的结果查询数据库?
这里有一些类似的问题,但它们不是我想要的,所以请原谅我,如果你认为这在其他地方得到了回答 我基本上是在寻找一种简单的方法来做事情,因为我有4000多个表可以从中获取数据。以下是我之前的帖子: 一般情况下,我有一个充满表的数据库,我只需要其中的四分之一,即大约4000个表。由于我上一篇文章的缘故,我有一个单独表名的列表,但我需要它们附带的数据。 我知道我可以选择表1.*,表2.*;或者类似的东西,但我不想经历所有4000个左右。 它们都以相同的名称结尾,例如员工姓名、经理姓名、客户姓名,以便我使用Mysql 使用多个表的结果查询数据库?,mysql,Mysql,这里有一些类似的问题,但它们不是我想要的,所以请原谅我,如果你认为这在其他地方得到了回答 我基本上是在寻找一种简单的方法来做事情,因为我有4000多个表可以从中获取数据。以下是我之前的帖子: 一般情况下,我有一个充满表的数据库,我只需要其中的四分之一,即大约4000个表。由于我上一篇文章的缘故,我有一个单独表名的列表,但我需要它们附带的数据。 我知道我可以选择表1.*,表2.*;或者类似的东西,但我不想经历所有4000个左右。 它们都以相同的名称结尾,例如员工姓名、经理姓名、客户姓名,以便我使用
SHOW TABLES LIKE '%_name'
查看数据库中所需的表名。有人建议使用动态mysql,但我甚至不知道从哪里开始。有什么建议吗?通用示例(PHP):
在编程语言的帮助下构建动态SQL或构建SQL查询如下所示(以PHP为例):
fetchAll
方法将返回一个数组,其中包含所选每个表的名称
内爆($glue,$array)
函数获取一个数组,并使用$glue
参数连接数组中的每个值-通常您获取一个值数组,并使用$glue=','
对其进行内爆,以创建一个分隔的值列表
在我们的例子中,内爆
有一个部分查询作为$glue
,以创建一个大的联合联接
查询
一旦最终的$query
构建完成,它应该看起来像:
SELECT * FROM table_1_name
UNION
SELECT * FROM table_2_name
UNION
SELECT * FROM table_3_name
....
....
UNION
SELECT * FROM table_4000_name
结果应该包含所有4000个表中的所有不同的行
具体示例(仅SQL格式):
- 第一条语句将从
information\u schema
数据库中获取所有表名李>
CONCAT
函数在每个表名前面加上一个'SELECT*FROM'
字符串李>
GROUP_CONCAT
完成了内爆
在PHP中应该完成的工作李>
INTO
子句确保值保存在名为my_variable
的变量中
PREPARE
语句获取一个字符串值(例如保存在my_variable
中的值),并检查该值是否为SQL查询
EXECUTE
语句接受一个“准备好的语句”,并且。。。执行它
@my_变量是一个临时变量,但它只能是标量类型(varchar、int、date、datetime、binary、float、double等)。它不是数组
GROUP\u CONCAT
函数是一个“聚合函数”,这意味着它接受一个聚合值(类似于数组的概念-在我们的例子中是查询的结果集),并输出一个简单的字符串结果。我建议生成SQL语句
试着做:
select concat('select * from ', table_name) as query
from Information_Schema.tables
where table_schema = <dbname> and
table_name like <whatever>
选择concat('select*from',table_name)作为查询
来自信息\u Schema.tables
其中,表_schema=和
表\u名称类似
然后,通过复制到查询编辑器窗口,可以将其作为一组查询运行
如果希望所有内容都作为一个查询,请执行以下操作:
select concat('select * from ', table_name, ' union all ') as query
from Information_Schema.tables
where table_schema = <dbname> and
table_name like <whatever>
选择concat('select*from',table_name,'union all')作为查询
来自信息\u Schema.tables
其中,表_schema=和
表\u名称类似
并删除最后的“联合所有”
该表的表名与like匹配。在获取所有表的位置中省略表名部分。或者,在()中包含使用table_name的特定表。hmmm看起来非常有用。。。请原谅我的无知,但它可以在phpmyAdmin中使用吗?不,phpmyAdmin是用PHP编写的应用程序,它不允许您直接在其中运行PHP代码。但是,如果您对安装了PHPMyAdmin的服务器具有FTP访问权限,那么您可以上传自己的PHP文件。PHP文件必须指定更多的信息,比如SQL连接凭据(user/pass)!查询是只使用SQL查询动态生成、准备和执行的。这看起来太棒了!那么@my_变量就像一个临时变量,可以用作数据数组之类的东西?我以前从未见过prepare&execute语句,很有趣从@my_variable
中准备my_语句,得到一个表“Table_name.aaaa_name”不存在错误看看@juergend与这个问题有什么关系?@MihaiStancu:在公认的答案中,是一个搜索特定列和内容的脚本。但它是针对SQL Server的,有很多SQL Server特定的语法@BladePartera自己移植这一点运气不好。这是一段有趣的代码,它通过列出查询(无法访问它们)实现了我想要的一半——至少它让我更容易看到。。。有没有一种方法可以说是table_name来指定像“%\u name”这样的表?顺便说一句,这是table_schema而不是schema_name:)这很好,尽管这不是我想要的,因为我想看看表中到底有什么。我可以复制所有查询并编辑它们,尽管这只是一个开始。谢谢你的帮助!!
select concat('select * from ', table_name) as query
from Information_Schema.tables
where table_schema = <dbname> and
table_name like <whatever>
select concat('select * from ', table_name, ' union all ') as query
from Information_Schema.tables
where table_schema = <dbname> and
table_name like <whatever>