【问题标题】:Join Issue in TeradataTeradata 中的加入问题
【发布时间】:2018-08-16 12:24:54
【问题描述】:

我在 2 个表中有 2 个字段。即。 status (status VARCHAR(80) CHARACTER SET LATIN CASESPECIFIC) 一张表的状态为 1000,因为值为“成功” 第二个表有 1 个状态值=成功和其他值,如“失败”。我想加入 2 个表并从第 2 个表(dw_status_id)中获取值

1ST TABLE scratch.COGIPF_RUNREPORT_test

STATUS    |  any_number
success   |    67
success   |    1
success   |    2
success   |    3
success   |    42
success   |    52
failure   |    45

第二张表 scratch.dw_job_status_dim_test

status   |dw_status_id
failure  |34      
success  |12
running  |45

结果:-

Status    |  dw_status_id
success   |    12
success   |    12
success   |    12
success   |    12
success   |    12
success   |    12
failure   |    34

我正在使用的查询:-

sel b.dw_status_id from scratch.COGIPF_RUNREPORT_test a
join scratch.dw_job_status_dim_test b on trim(a.status)=trim(b.status)

实际结果=0

如果有人能帮助实现这一点,那就太好了

谢谢

【问题讨论】:

  • 除非有前导空格,否则无需使用 Trim 加入。但是,当您没有得到任何结果时,它可能表明“成功”字符串不完全相同(列定义为 casespecific),或者可能有一些尾随字符看起来像空间。当您分别对两个表应用where status = 'success' 时,您会得到结果吗?
  • no dnoeth..-> select scratch.COGIPF_RUNREPORT_test.status, dw_job_status_id from scratch.COGIPF_RUNREPORT_test, scratch.dw_job_status_dim_test where scratch.COGIPF_RUNREPORT_test.status like '%success%' and scratch.dw_job_status_dim_test.status = '成功';这是有效的..但我不想硬编码它。
  • 如果不使用通配符运行会怎样:status = 'success'?
  • 结果将是没有行
  • 使用上面的查询结果会是success,12success,12,success 12

标签: sql join logic teradata teradata-sql-assistant


【解决方案1】:

您只需要从头开始选择状态。COGIPF_RUNREPORT_test 和从头开始的 dw_status_id.dw_job_status_dim_test。你必须检查两个表的状态是否等于成功。

所以我自己试过了,也许有帮助:

select distinct scratch.COGIPF_RUNREPORT_test.status, dw_status_id 
from scratch.COGIPF_RUNREPORT_test, scratch.dw_job_status_dim_test 
where scratch.COGIPF_RUNREPORT_test.status = scratch.dw_job_status_dim_test.status

【讨论】:

  • 如果有帮助,我已经添加了我的评论亚历克斯
  • 我已经更新了你的查询,然后它正在返回结果
  • 结果仍然为零
  • 也许我在查询中使用的字段之一不等于您在数据库中使用的字段。或者您尝试使用 like 而不是 =
  • 通过使用 like to %success%.. 我不想硬编码它..是否可以使用 like 与 cogif 1st table 中的所有状态?
【解决方案2】:

这是来自第一个表的 3 条记录:-

按时间按日期发货指标-superrush 0 0 0 0 2018-03-07 01:40:08 2018-03-07 00:00:00 2018-03-07 01:41:46.917000 1.64101666667 成功

实验室 - 延迟发货详细信息 0 0 0 0 2018-03-07 01:40:08 2018-03-07 00:00:00 2018-03-07 01:40:44.950000 0.6078 成功

航运升级-tp/wpd/mypub 0 0 0 0 2018-03-07 01:40:09 2018-03-07 00:00:00 2018-03-07 01:40:25.028000 0.2674 成功

这些是来自第二张表的一些记录

dw_status_id 状态描述success_indicator

10 正在运行 RUNNING 0

11 停止 停止 0

12 成功 SUCCESS 1

我已经尝试了您的 2 个查询.. 都没有给出任何结果。 理想情况下,它应该给出预期的结果。但不知何故,我们在 join 或 varchar 特定情况下犯了错误..如果您有更多的想法,请告诉我我在哪里做错了

【讨论】:

  • 这个更新的 sql 给出了结果:- 从头开始​​选择不同的 scratch.COGIPF_RUNREPORT_test.status、dw_job_status_id.COGIPF_RUNREPORT_test、scratch.dw_job_status_dim_test 其中 scratch.COGIPF_RUNREPORT_test.status 像 '%success%' 和 scratch.dw_job_status_dim_test。状态 = '成功';
  • 结果:- 成功 12
  • 所以这个查询对你有用吗?我觉得和我上面发的一样。唯一的区别是你写的是“like”而不是“=”。
  • 是的 Alex ..但我不想硬编码成功...我想要第一个表 cogipf 中的所有状态记录 ..将来我可能还会获得其他状态,例如失败..
  • 我希望你能得到我
猜你喜欢
  • 2016-10-06
  • 1970-01-01
  • 2016-11-07
  • 2019-01-20
  • 2014-12-24
  • 2012-08-06
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
相关资源
最近更新 更多