【发布时间】:2021-12-31 18:59:46
【问题描述】:
我有两张桌子:
- 表 1
- 第 2 章
Tbl 2 包含用户在Tbl 1 中执行的交易。表格包含类似以下屏幕截图的数据。
我想从Tbl 2 中选择数据,但不是ac_to 列值,而是我想要从Tbl 1 中对应的uid 值。
我的查询轨迹是:
select t2.ac_from_ui,
t1.ui as "ac_to_uid",
t2.amt
from tbl1 t1
join tbl2 t2
on t2.ac_to = t1.ac_ref
所以我想知道两件事:
- 有没有更好的方法可以根据一个表中的值从其他表中查询和获取数据
- 使用上述查询会使我丢失
ac_to字段中带有NA 的交易。我想保留这些
我尝试了左连接,但它在大型数据集上的性能对我来说是个问题
【问题讨论】:
-
左连接不应该有那么大的影响。这是强制转换或索引问题吗?
-
不,leftjoin 是最有效的方法吗?
-
这些列的数据类型是什么? NA 行的百分比是否很大?检查说明 tbl_2 是否重新分发。
-
再一次,这些列的数据类型是什么?字符串
'NA'和数字“5”不匹配。 -
您可能会拆分为 UNIONed 选择,将
where t2.ac_to = 'NA'添加到#1 并将where t2.ac_to = 'NA'添加到#2。顺便说一句,如果有关于 t2.ac_to 的统计信息,优化器应自动应用此技术以避免偏差。