首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL多表查询

问MySQL多表查询
EN

Stack Overflow用户
提问于 2010-03-06 00:37:20
回答 2查看 257关注 0票数 0

我有一堆按日期排序的数据,每个表只保存一个月的数据。(这样做的原因是为了减少查询时间,我说的是每个月表中的数百万行)

对于ex。

代码语言:javascript
复制
data_01_2010 holds data from 2010-01-01 to 2010-01-31
data_02_2010 holds data from 2010-02-01 to 2010-02-28

有时,我必须根据特定的日期范围来查询这些表。现在,如果范围是跨多个月的ex。2010-01-01到2010-02-28,然后我需要查询这两个表。

这可以通过一个查询来实现吗?例如:

代码语言:javascript
复制
SELECT * 
FROM data_01_2010, data_02_2010 
WHERE date BETWEEN '2010-01-01' AND '2010-02-28'

上面查询的问题是,它说date列是不明确的,因为该列在两个表中都存在。(表格具有相同的结构)

那么,这是可以通过单个查询实现的,还是必须为每个表单独查询它?

EN

回答 2

Stack Overflow用户

发布于 2010-03-06 00:57:40

这是为什么分区如此强大的一个完美例子。分区允许您在不牺牲查询性能的情况下逻辑地将所有记录存储在同一个表中。 在此示例中,您将有一个名为 data 的表(希望您将其命名为比此更好的名称)并根据日期列的值对其进行范围分date(同样希望您将此列命名为更好)。这意味着您可以通过简单的选择来满足您的要求:

代码语言:javascript
复制
SELECT * FROM data WHERE date BETWEEN '2010-01-01' AND '2010-02-28';

在幕后,数据库将只访问基于where子句所需的分区。

参考:http://dev.mysql.com/doc/refman/5.5/en/partitioning.html

票数 2
EN

Stack Overflow用户

发布于 2010-03-06 00:46:26

如果您在其他地方执行逻辑以确定需要查询哪些表,并且每个月都具有相同的模式,则可以只联合这些表:

代码语言:javascript
复制
SELECT *
FROM data_01_2010
WHERE date BETWEEN '2010-01-01' AND '2010-02-28'
UNION ALL
SELECT *
FROM data_02_2010
WHERE date BETWEEN '2010-01-01' AND '2010-02-28'

但是,如果您需要查询来计算哪些表要联合,那么您就进入了存储过程的领域。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2388315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档