MySQL:选择相关行

标签 mysql sql

我有 big_table 大约有几亿行,correlation_table 大约有几千行。 Corelation_table 通过 dep_id 字段值将 big_table 的行相互关联。

我要big_table中选择所有关联行的id。

示例:

       big_table
id     name     dep_id  <other_data>
341  "vehicle"    6       .....
342   "byce"      19      .....
343  "ferrari"    6       .....

correlation_table
dep_id1 dep_id1
   6      19

expected result:
id1 id2     
341 342
343 342

问题: 如何在 MySQL 中以最有效的方式做到这一点?

最佳答案

您可以通过给它两个不同的别名将大表两次连接到相关表,如下所示:

SELECT
  b1.id AS id1,
  b2.id AS id2
FROM
  big_table b1
  INNER JOIN Correlation_table c ON c.dep_id1 = b.id
  INNER JOIN big_table b2 ON b2.id = c.dep_id2

但是如果你想从一个亿行表中选择所有这些记录,这可能需要一段时间。但我认为没有比这更有效的方法了。

索引可能有帮助,但如果您要选择所有记录则几乎没有帮助。联接的顺序可能会有所帮助,因此您可以从相关表开始,看看它是否更快:

SELECT
  b1.id AS id1,
  b2.id AS id2
FROM
  Correlation_table c
  INNER JOIN big_table b1 ON b.id = c.dep_id1
  INNER JOIN big_table b2 ON b2.id = c.dep_id2

这取决于确切的数字。 big_table 中的所有行是否都已连接,您是否要选择所有这些行,有多少“组”(dep_ids),等等。

关于MySQL:选择相关行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23865655/

相关文章:

mysql - 需要外键约束的详细信息失败

mysql - Zend Framework 2 无法从联接表中获取字段

php - MySQL:每个 INNER JOIN 的不同条件

SQL/DB2 - 同时检索值和更新/增量

jquery - 使用 JQuery 隐藏选定的 TR

php - 如何获得一个空的关联数组?

MySQL where if 语句

sql - 2 列在一张表中有 2 个不同的条件

mysql - 从子表中选择多行数据以及MySQL中的父行表

sql - 仅使用最小 COUNT() 转置行和列(又名枢轴)?