【问题标题】:SQL - Compare multiple records of a given ID in Table A with multiple records of same ID in Table BSQL - 将表 A 中给定 ID 的多条记录与表 B 中相同 ID 的多条记录进行比较
【发布时间】: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


猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-06-15
  • 2012-06-23
  • 2013-05-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2021-08-20
相关资源
最近更新 更多