【问题标题】:retrieve column value based on column value in another table根据另一个表中的列值检索列值
【发布时间】: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 的统计信息,优化器应自动应用此技术以避免偏差。

标签: sql database teradata


【解决方案1】:

我认为这是执行此操作的标准或经典方法。左连接将在响应中保留带有“NA”的元组。您的表上有适当的索引吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2021-05-13
    • 2022-06-14
    • 1970-01-01
    • 2021-11-19
    • 2019-08-10
    相关资源
    最近更新 更多