我有多个表,我像这样联接它们(它们共享相同的密钥)
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
或者这些查询是否全部相等?
答案 0 :(得分:1)
您的两个版本在功能上是等效的(除了在不使用user_id
时重复的using
列明显不同)。第一个inner join
要求两个user_id
具有相同的值,因此任一比较都将返回相同的结果集。
如果您有一系列left join
,那么您将要求该值位于 first 表中,而等效值将为t1.user_id
。
如果您有full join
,那么您将不会知道。匹配将来自在行上具有值的表。如果两个表都具有值,则逻辑上说它们是相同的,因此没有区别。