【问题标题】:how to extract multiple records by comparing unique id in mySQL [closed]如何通过比较mySQL中的唯一ID来提取多条记录[关闭]
【发布时间】:2014-02-23 17:11:39
【问题描述】:

如何通过比较 mySQL 中的唯一 id 来提取多条记录。

我有一个 excel 文件。

每条记录都有 36k 条具有唯一 ID 的记录。

唯一 ID 是从 11493(最小值)到 258090(最大值)的随机数 - 原因是,它在一个阶段从 70 万条记录的主表中提取。

MySQL 中的主表 - Phpmyadmin 超过 70 万条记录

我需要将唯一 ID 与 700k 表唯一 ID 进行比较,并仅获取所有 36k 记录

在excel文件和表格中有一个共同点[UNIQUE ID]

我怎样才能做到这一点?

【问题讨论】:

    标签: php mysql sql excel phpmyadmin


    【解决方案1】:

    最简单的方法是创建一个简单的查询:

    select * from TABLENAME where unique_id in (COMMA SEPARATED UNIQUE IDS);
    

    假设您知道如何在 excel 文件中使它们以逗号分隔。

    就是这样

    【讨论】:

    • 他正在尝试获取 36k 条记录。 IN 子句不会有效率。
    • @ArvindSridharan 然后解释这两个查询:如果没有为 unique_id 编制索引,我的查询将检查 700k 条记录,如果您在 unique_id 中创建索引,则仅 36k,现在看到您的查询将检查 700k*36k。决定哪一个是有效的?
    • IN 子句不使用索引。临时表上的高效索引可以加快查询流形。见stackoverflow.com/a/6219545/728610
    • @ArvindSridharan 我的错,真的...
    • 当你发表评论时我也是这么想的,但是通过 mysql 文档和 SO 有所帮助。
    【解决方案2】:

    您可以将数据加载到临时表中,然后将其与您的真实表连接起来,以获得您想要的记录。这就是你必须做的事情

    1) 创建一个临时表。添加相关索引以加快查询速度。

    create temporary table record_ids (int id);
    

    2) 将excel文件中的数据(导出为CSV)加载到临时表中

    LOAD DATA INFILE "<path to your file>"
    INTO TABLE record_ids
    COLUMNS TERMINATED BY ','
    LINES TERMINATED BY '\n'
    IGNORE 1 LINES;
    

    3) 通过加入临时表获得你想要的记录。

    SELECT at.* 
    FROM   actual_table at 
           INNER JOIN record_ids ri 
                   ON at.id = ri.id = at.id; 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多