使用mysql中不同表中的多个列进行连接
Big_表有数百万条记录。Little_Table是一个将被重新格式化和导入的电子表格,有25000条记录。这些表共享一些需要匹配的公共和类似但表达方式不同的列,这些列是:使用mysql中不同表中的多个列进行连接,mysql,Mysql,Big_表有数百万条记录。Little_Table是一个将被重新格式化和导入的电子表格,有25000条记录。这些表共享一些需要匹配的公共和类似但表达方式不同的列,这些列是: Big_Table 常用列:仪器,日期,ts 样本数据:spy20170602put2412017-06-0109:21:20.107,09:21:00.935 小表格 常用列:仪器,日期,时间 样本数据:SPY20170602PUT2412017年6月1日9:21:00 目标是从匹配*小\u表的大\u表中检索记录
Big_Table
- 常用列:仪器,日期,ts
- 样本数据:
spy20170602put2412017-06-0109:21:20.107,09:21:00.935
小表格
- 常用列:仪器,日期,时间
- 样本数据:
SPY20170602PUT2412017年6月1日9:21:00
- instr and instrument are the same exact string
- date and Date indicate the same mm/dd/yyyy
- ts and time indicate the same hh/mm/ss
根据我的理解,这是多个条件下的简单联接,请尝试以下示例:
SELECT * FROM Big_Table JOIN Little_Table ON (instr=instrument AND date=Date AND ts=time) WHERE ....
这是对我有用的东西。我创建了一个新的修改版的Big_Table,其中有一个自定义列,trade_name。我还使用自定义列trade\u name创建了Little\u表,专门用于匹配。我怀疑这是最好的解决办法,但它奏效了。详情如下: *trade\u name,工程列,将最初格式不匹配的三个匹配标准和每个表中的单独列组合成一个 格式规范化,连接字符串(日期+时间+仪器)。i、 e.对于每个表,表示日期、时间和仪器的列以类似格式连接到贸易名称列中
INSERT INTO Big_Table_New
SELECT *, CONCAT_WS(' | ',instr,DATE(date),TIME_FORMAT(ts,'%T'))
FROM Big_Table
WHERE date>='2017-06-01 00:00:00' AND date<'2017-06-02 00:00:00'
AND instr IN (SELECT instrument FROM instruments);
SELECT *
FROM Big_Table_New, Little_Table_New
WHERE Big_Table_New.`trade_name` = Little_Table_New.`trade_name`;
INSERT INTO Big_Table_New
SELECT *, CONCAT_WS(' | ',instr,DATE(date),TIME_FORMAT(ts,'%T'))
FROM Big_Table
WHERE date>='2017-06-01 00:00:00' AND date<'2017-06-02 00:00:00'
AND instr IN (SELECT instrument FROM instruments);
SELECT *
FROM Big_Table_New, Little_Table_New
WHERE Big_Table_New.`trade_name` = Little_Table_New.`trade_name`;
查询耗时约150秒,这已经足够了始终使用正确的数据类型存储数据。