Mysql 使用多个表的结果查询数据库?

Mysql 使用多个表的结果查询数据库?,mysql,Mysql,这里有一些类似的问题,但它们不是我想要的,所以请原谅我,如果你认为这在其他地方得到了回答 我基本上是在寻找一种简单的方法来做事情,因为我有4000多个表可以从中获取数据。以下是我之前的帖子: 一般情况下,我有一个充满表的数据库,我只需要其中的四分之一,即大约4000个表。由于我上一篇文章的缘故,我有一个单独表名的列表,但我需要它们附带的数据。 我知道我可以选择表1.*,表2.*;或者类似的东西,但我不想经历所有4000个左右。 它们都以相同的名称结尾,例如员工姓名、经理姓名、客户姓名,以便我使用

这里有一些类似的问题,但它们不是我想要的,所以请原谅我,如果你认为这在其他地方得到了回答

我基本上是在寻找一种简单的方法来做事情,因为我有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>