【发布时间】:2016-11-24 09:01:51
【问题描述】:
我有两张桌子:
表 A:
- 身份证
表 B:
- id1
- id2
- ...(许多其他列)
我想获取 B 中 B.id1 或 B.id2 为 A.id 的所有行(所有 A.id 都是不同的。B 不是这种情况)。
我已经尝试过查询:
create table C as
select B.*
from B
join A on (A.id = B.id1 or A.id = B.id2);
这很好用,只是它复制了 id1 和 id2 都在 id 中的行。 A 是一个相对较小的表(大约 5000 行),而 B 非常大(大约 10 亿行)。
我想到的解决方案涉及按 B 的列分组,以便消除不同的行,将 A 的 id 收集到一个数组中并在数组中搜索 id1 和 id2,并使用 2 个单独的查询来搜索 id1和 id2 分别然后合并两个表。这些似乎都非常低效,尤其是考虑到表格的大小。有没有更好的方法可以做到这一点,我错过了?谢谢。
【问题讨论】:
-
使用
select distinct有什么问题? -
考虑到我的数据量太慢了。