两个表按编号间隔

时间:2018-05-06 12:58:45

标签: sql database join

您好我有两个SQL表,首先看起来像这样:

| id | position | name  |
|----|----------|-------|
| 1  | 553      | John  |
| 2  | 876      | James |
| 3  | 999      | Jack  |

第二个像这样:

| id | class  | interval_start | interval_end |
|----|--------|----------------|--------------|
| 1  | class1 | 500            | 580          |
| 2  | class2 | 600            | 700          |
| 3  | class3 | 900            | 1200         |

我想根据间隔将第二个表中的类添加到第一个表中(如果t1.position大于start而小于end - 使用class添加另一个列) 所以结果应该是:

| id | position | name  | class  |
|----|----------|-------|--------|
| 1  | 553      | John  | class1 |
| 2  | 876      | James |        |
| 3  | 999      | Jack  | class3 |

我不知道该怎么做,因为我有非常大的表(数百万行)。我也可以下载数据并用Python手动处理。

您认为哪种方式最适合此任务?

2 个答案:

答案 0 :(得分:0)

您可以使用left join

select t1.*, t2.class
from table1 t1 left join
     table2 t2
     on t1.position between t2.interval_start and t2.interval_end;

答案 1 :(得分:0)

您可以尝试以下SQL,它将满足您的要求。

select  t1.id,
        t1.position,
        t1.name,
        t2.class
from table1 t1
 left join table2 t2
   on (t1.id = t2.id
    and t1.position between t2.interval_start and t2.interval_end
       );

输出:

+------+----------+-------+--------+
| id   | position | name  | class  |
+------+----------+-------+--------+
|    1 |      553 | John  | class1 |
|    3 |      999 | Jack  | class3 |
|    2 |      876 | James | NULL   |
+------+----------+-------+--------+