如何在不同列上联接同一表

时间:2019-07-10 14:22:45

标签: sql apache-spark hive

我有一个正在使用的主表cohort_table,它在三个不同的列customer_zippayer_zipprovider_zip中包含数字形式的邮政编码。我想将此表与另一个表city_zip连接,该表在名为zip3的列中具有3位数形式的数字邮政编码,而在名为zip5的列中具有5位数形式的邮政编码每个邮政编码代表的城市city_name。简而言之,我想加入其中customer_zip = zip3payer_zip = zip5provider_zip = zip5的表。运行此命令时,得到的结果就是我想要的:

select *
from cohort_table
left join city_zip on zip3 = customer_zip

但是,当我尝试同时执行所有三个联接时,我总是收到有关表不明确的错误。

select *
from cohort_table
left join city_zip on zip3 = customer_zip
left join city_zip on zip5 = payer_zip
left join city_zip on zip5 = provider_zip

1 个答案:

答案 0 :(得分:3)

使用表别名!限定列名!

select *
from cohort_table c left join
     city_zip zc3
     on zc3.zip3 = c.customer_zip left join
     city_zip zc5
     on zc5.zip5 = c.payer_zip left join
     city_zip zp5
     on zp5.zip5 = c.provider_zip;

如果您已阅读我对上一个question的回答,那么您将了解如何执行此操作。这个问题并非完全重复(因此没有解决),因为您引入了第三种查找可能性。