Amazon Athena:对具有不同字符长度的列值进行 SQL 查询

问题描述 投票:0回答:1

我有两张桌子,一个 “已登记表” 和一个 “客户表”。
我只想显示 Customer Table 上的所有记录,其中 Customer table 上的 enrolled_no“Enrolled Table”上的 enrolled_no 匹配。

通过匹配两个表中的 enrolled_no 列,选择客户表中的所有记录。

假设: 在客户表上,enrolled_no 列显示已注册表

中的 enrolled_no 的最后 7 个字符或 8 个字符的长度

我遇到的问题是在Customer表上,因为enrolled_no列显示了最后7个字符或最后8个字符的长度,我如何编写一个查询来匹配Customer表中的enrolled_no到Enrolled表。

报名表

客户 ID 已注册_否
客户1 123a233e0000001
客户2 323a262e0000002
客户3 854a222e0000003

客户表

客户 ID 产品 已注册_否
客户1 产品1 e0000001
客户2 产品2 0000002
客户3 产品3 0000003
客户4 产品4

所需输出

客户 ID 产品 已注册_否
客户1 产品1 e0000001
客户2 产品2 0000002
客户3 产品3 0000003

我已经尝试过以下方法,但想检查是否有更好的方法来编写查询

with enrolled_table AS (  

SELECT  
customer_id,  
SUBSTR(enrolled_no,-8) AS enrolled8,  
SUBSTR(enrolled_no,-7) AS enrolled7,  
FROM enrolled  
)  
SELECT*  
FROM customer c  
WHERE (  
c.enrolled_no in ( select enrolled7 from enrolled )           
or  
c.enrolled_no in ( select enrolled8 from enrolled)    
)
sql amazon-athena
1个回答
0
投票

尝试

SELECT c.customer_id,c.product, enrolled_no  
FROM customer c  
inner join enrolled e 
  on SUBSTR(e.enrolled_no,-8)=c.enrolled_no
   or SUBSTR(e.enrolled_no,-7)=c.enrolled_no
© www.soinside.com 2019 - 2024. All rights reserved.