从INFORMATION_SCHEMA检索的一组表中的MySQL SELECT
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从INFORMATION_SCHEMA检索的一组表中的MySQL SELECT,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1554字,纯文字阅读大概需要3分钟。
内容图文
![从INFORMATION_SCHEMA检索的一组表中的MySQL SELECT](/upload/InfoBanner/zyjiaocheng/880/ca5254f14b4149efaafe5cbffe9d44a5.jpg)
大家好.我有以下几组表,这些表是可变的,并且每天都会累加:
data-2010-10-10
data-2010-10-11
data-2010-10-12
data-2010-10-13
等等.所有表都具有相同的结构,我想立即从所有表中选择内容.由于正在运行InnoDB,因此无法使用MERGE表.无论如何,我正在使用以下语句从我的information_schema中选择表名称:
select table_name from `information_schema`.`tables`
where `table_schema` = 'mydb2' and `table_name` like 'data-%'
哪个返回我要合并的所有表.我还可以group_concat返回的结果以逗号作为分隔符来列出结果.现在,我遇到的问题是运行一个选择查询,该查询实际上将从这些表中检索数据.
任何提示表示赞赏.谢谢! ?K
解决方法:
您将必须使用动态SQL来构建查询(或多个查询),以从这些表中获取结果.也就是说,您可以从information_schema查询中以字符串形式返回表,然后将这些字符串插入到进一步的查询中.
涉及针对所有表的单个查询的UNION:
SELECT ...
FROM (SELECT * FROM `data-2010-10-10`
UNION ALL SELECT * FROM `data-2010-10-11`
UNION ALL SELECT * FROM `data-2010-10-12`
UNION ALL SELECT * FROM `data-2010-10-13`) AS u
但我质疑您每天创建一个单独的表的设计.乍一看似乎很方便,但是表传播失控了,您最终难以进行普通查询,就像现在面临的困难一样.这是一个antipattern,我称为“元数据Tribbles”.
您的数据可能存储在一个表中,并带有一个日期列,以便您区分不同日期的数据.您可能只需要创建索引来辅助需要针对总数据运行的查询.
发表您的评论:
您不能在SQL查询(包括视图定义)中使表名称动态化.您可以将表名插入一个字符串中,然后将该字符串准备为SQL查询.
您可以使用CONCAT()函数构建字符串,然后使用PREPARE and EXECUTE将字符串作为查询运行.但是由于mysql客户端中没有循环结构,因此如果您无法使用Python或PHP或某些此类宿主语言编写脚本,则必须编写存储过程来执行此操作.
内容总结
以上是互联网集市为您收集整理的从INFORMATION_SCHEMA检索的一组表中的MySQL SELECT全部内容,希望文章能够帮你解决从INFORMATION_SCHEMA检索的一组表中的MySQL SELECT所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。