【发布时间】: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