【发布时间】:2022-06-18 01:51:26
【问题描述】:
背景:
我的表 1 有 10,000,000 行,如下所示。每个 ID 有多个记录。每个 ID 的记录数各不相同。
表 1
| ID | Start | End |
|---|---|---|
| A | 3 | 5 |
| A | 17 | 21 |
| A | 1 | 10 |
| B | 0 | 5 |
| C | 60 | 70 |
| C | 5 | 55 |
| D | 14 | 24 |
| D | 65 | 100 |
| D | 36 | 49 |
我还有表 2,其中包含 8,000,000 行,如下所示。每个 ID 也有多个记录,这些记录也各不相同。表 2 中给定 ID 的记录数不必与表 1 中每个 ID 的记录数匹配(即,表 2 中相同 ID 可以有更少条目、相同数量的条目或更多条目与表 1 相比)。此外,表 2 可能没有表 1 中给定 ID 的实例。例如,与表 1 相比,表 2 没有 ID D 的条目,但 ID C 的条目更多。
表 2
| ID | Value |
|---|---|
| A | 2 |
| A | 18 |
| B | 0 |
| C | 60 |
| C | 0 |
| C | 4 |
| C | 3 |
请求
我想在表 1 中添加一个新的标志列。该列的值为 0 或 1。对于表 1 中给定 ID 的每一行,它将与表 2 中同一 ID 的所有行。如果表 2 中的 任何 值,对于该 ID,则在该特定行和 ID 的 [Start, End] 范围内在表 1 中,则表 1 中对应的行收到 1。否则,它收到 0。每一行表 1 中给定 ID 的行需要单独评估。
所需的输出(表 1 展开)
| ID | Start | End | FLAG_NEW |
|---|---|---|---|
| A | 3 | 5 | 0 |
| A | 17 | 21 | 1 |
| A | 1 | 10 | 1 |
| B | 0 | 5 | 1 |
| C | 60 | 70 | 1 |
| C | 5 | 55 | 0 |
| D | 14 | 24 | 0 |
| D | 65 | 100 | 0 |
| D | 36 | 49 | 0 |
我不确定如何进行。我考虑过基于 ID 对表 1 进行左连接(多对多匹配),但考虑到我们正在处理数百万行并且每个表中每个 ID 可以有许多多行,这似乎是站不住脚的。我在 Stack Overflow 上进行了广泛的搜索,但找不到一个帖子来说明两个表中给定 ID 的多个条目的这种特定用例。 This post 将第二个表“折叠”成一个条目,这不是我想要的。
感谢您的宝贵时间。
【问题讨论】:
-
只标记您使用的数据库。
标签: sql