presto sql:使用`using`语句进行​​多次连接

时间:2019-11-26 15:09:40

标签: sql presto

我有多个表,我像这样联接它们(它们共享相同的密钥)

select *
from user_account_profile
inner join user_asset_profile
using (user_id)
left join user_trading_profile
using (user_id)

我想知道如何使用键user_id?它等效于

select *
from user_account_profile t1
inner join user_asset_profile t2
on t1.user_id = t2.user_id
left join user_trading_profile t3
on t1.user_id = t3.user_id

select *
from user_account_profile t1
inner join user_asset_profile t2
on t1.user_id = t2.user_id
left join user_trading_profile t3
on t2.user_id = t3.user_id

或者这些查询是否全部相等?

1 个答案:

答案 0 :(得分:1)

您的两个版本在功能上是等效的(除了在不使用user_id时重复的using列明显不同)。第一个inner join要求两个user_id具有相同的值,因此任一比较都将返回相同的结果集。

如果您有一系列left join,那么您将要求该值位于 first 表中,而等效值将为t1.user_id

如果您有full join,那么您将不会知道。匹配将来自在行上具有值的表。如果两个表都具有值,则逻辑上说它们是相同的,因此没有区别。