使用mysql中不同表中的多个列进行连接

使用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_表有数百万条记录。Little_Table是一个将被重新格式化和导入的电子表格,有25000条记录。这些表共享一些需要匹配的公共和类似但表达方式不同的列,这些列是:

Big_Table
  • 常用列:仪器日期ts
  • 样本数据:
    spy20170602put2412017-06-0109:21:20.107,09:21:00.935
小表格

  • 常用列:仪器日期时间
  • 样本数据:
    SPY20170602PUT2412017年6月1日9:21:00
目标是从匹配*小\u表的大\u表中检索记录。要做到这一点,我需要一些指导,如有必要,构建/重新格式化一些小的_表列,然后进行查询以完成工作。请告知。 *匹配是指每个表中的一行符合以下三个条件:

- 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.对于每个表,表示日期、时间和仪器的列以类似格式连接到贸易名称列中

  • 创建Big_Table_New:我使用Big_Table中的CREATE Table语句,称之为“Big_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`; 
    
  • 最终查询使用了以下语句:

    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秒,这已经足够了


  • 始终使用正确的数据类型存储数据。