大家好。我有以下一组表格,这些表格是可变的并且每天都会累加:
data-2010-10-10
data-2010-10-11
data-2010-10-12
data-2010-10-13
等等。所有表都具有相同的结构,我想做的是一次从所有表中选择内容。我无法使用 MERGE 表,因为我正在运行 InnoDB。无论如何,我正在使用以下语句从我的 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我称之为元数据问题。
您的数据很可能会存储在一个表中,并使用日期列来区分不同日期的数据。您可能只需要创建索引来协助您需要针对总数据运行的查询。
回复你的评论:
您不能在 SQL 查询(包括 View 定义)中使表名动态化。您可以将表名插入字符串,然后将该字符串准备为 SQL 查询。
您可以使用 CONCAT() 构建一个字符串函数,然后使用 PREPARE and EXECUTE将字符串作为查询运行。但是由于 mysql 客户端中没有循环结构,如果您不能用 Python 或 PHP 或某些此类宿主语言编写脚本,则必须编写一个存储过程来执行此操作。
关于sql - MySQL SELECT 从一组从 INFORMATION_SCHEMA 检索的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902013/
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p
目录第1题连续问题分析:解法:第2题分组问题分析:解法:第3题间隔连续问题分析:解法:第4题打折日期交叉问题分析:解法:第5题同时在线问题分析:解法:第1题连续问题如下数据为蚂蚁森林中用户领取的减少碳排放量iddtlowcarbon10012021-12-1212310022021-12-124510012021-12-134310012021-12-134510012021-12-132310022021-12-144510012021-12-1423010022021-12-154510012021-12-1523.......找出连续3天及以上减少碳排放量在100以上的用户分析:遇到这类
我正在尝试查询我的Rails数据库(Postgres)中的购买表,我想查询时间范围。例如,我想知道在所有日期的下午2点到3点之间进行了多少次购买。此表中有一个created_at列,但我不知道如何在不搜索特定日期的情况下完成此操作。我试过:Purchases.where("created_atBETWEEN?and?",Time.now-1.hour,Time.now)但这最终只会搜索今天与那些时间的日期。 最佳答案 您需要使用PostgreSQL'sdate_part/extractfunction从created_at中提取小时
我试图在我的网站上实现使用Facebook登录功能,但在尝试从Facebook取回访问token时遇到障碍。这是我的代码:ifparams[:error_reason]=="user_denied"thenflash[:error]="TologinwithFacebook,youmustclick'Allow'toletthesiteaccessyourinformation"redirect_to:loginelsifparams[:code]thentoken_uri=URI.parse("https://graph.facebook.com/oauth/access_token
我创建了一个由于“在运行时执行的单例元类定义”而无法编码的对象(这段代码的描述是否正确?)。这是通过以下代码执行的:#defineclassXthatmyusesingletonclassmetaprogrammingfeatures#throughcallofmethod:break_marshalling!classXdefbreak_marshalling!meta_class=class我该怎么做才能使对象编码正确?是否可以从对象instance_of_x的classX中“移除”单例组件?我真的需要一个建议,因为我们的一些对象需要通过Marshal.dump序列化机制进行缓存。
我找到了这样的东西:Rails:Howtolistdatabasetables/objectsusingtheRailsconsole?这一行没问题:ActiveRecord::Base.connection.tables并返回所有表但是ActiveRecord::Base.connection.table_structure("users")产生错误:ActiveRecord::Base.connection.table_structure("projects")我认为table_structure不是Postgres方法。如何列出Postgres数据库的Rails控制台中表中的所有
Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject
我正在编写一个Rails应用程序,它将监视某些特定数据库的数据质量。为了做到这一点,我需要能够对这些数据库执行直接SQL查询——这当然与用于驱动Rails应用程序模型的数据库不同。简而言之,这意味着我无法使用通过ActiveRecord基础连接的技巧。我需要连接的数据库在设计时是未知的(即:我不能将它们的详细信息放在database.yaml中)。相反,我有一个模型“database_details”,用户将使用它来输入应用程序将在运行时执行查询的数据库的详细信息。因此与这些数据库的连接实际上是动态的,细节仅在运行时解析。 最佳答案
我正在使用Rails4应用程序,它需要创建大量对象以响应来自另一个系统的事件。当我调用create!时,主键列上出现非常频繁的ActiveRecord::RecordNotUnique错误(由PG::UniqueViolation引起)我的模型之一。我在SO上找到了其他答案,建议挽救异常并调用retry:beginTableName.create!(data:'here')rescueActiveRecord::RecordNotUnique=>eife.message.include?'_pkey'#Onlyretryprimarykeyviolationslog.warn"Retr