【问题标题】:Combine two tables based on a relationship table in Teradata基于 Teradata 中的关系表合并两个表
【发布时间】:2016-12-08 00:16:51
【问题描述】:

社区,

我接到了在 Teradata 中测试数据的任务。来自另一个领域,我想请你帮忙。

所以我有三个表:

  • Zus0ID1ID2
  • Zus1: ID1
  • Zus2: ID2

现在我需要根据Zus0 中的ID 信息加入Zus1Zus2。 我遇到的问题是Zus0 中显示的ID1 具有与Zus1 不同的列名和格式。

像这样:

  • ID1 in Zus1: "6123421" ; --名为IDZ的列
  • ID1 in Zus0: "000006123421";--名为IDY的列

现在我想根据Zus0 中的关系加入两个表,你知道我该怎么做吗?

【问题讨论】:

  • 两列的数据类型是什么?除了数字之外还有其他字符的机会吗?
  • Zus0 中的列是否总是有前导 0?

标签: sql join teradata


【解决方案1】:

假设 ID 都是数字,问题只是存储为 varchar 之类的 ID 中的前导零:

SELECT b.id1, c.id2
FROM Zus0 a
INNER join Zus1 b on CAST(b.id1 as BIGINT)=CAST(a.id1 as BIGINT)
INNER join Zus2 c on CAST(c.id2 as BIGINT)=CAST(a.id2 as BIGINT)

您可能实际上不需要转换两组字段,因为其中一组字段已经是数字。由于您正在投射连接,因此如果您的两个字段都已经是数字并且不需要转换,则连接速度也会慢。

【讨论】:

  • 实际上,如果您这样做是为了测试:相同信息以不同方式存储的事实可能应该是测试失败。最好现在修复它而不是让这样的事情推出
猜你喜欢
  • 2021-06-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2021-03-04
  • 2018-03-15
  • 2014-08-18
  • 1970-01-01
  • 2014-10-25
相关资源
最近更新 更多