我有一个SQL查询,它通过user_id
连接几个表,问题是我希望看到这些表中的所有数据。
目前我正在查询用户表和付款表,并根据user_id
加入。
我似乎每个user_id只得到一个结果,现在我知道它意味着发生但是如何(如果可能的话),我能够显示付款表中的所有数据(即我希望看到多个用户ID显示用户所做的各种付款。
我目前正在使用左连接,我认为这可能是问题但是仍然没有显示我正在寻找的结果。
这是我目前的加入:
from user u
left join u_subscription us
on u.user_id = us.user_id
left join u_detail ud
on u.user_id = ud.user_id
非常感谢任何帮助。
提前致谢
纳德
完整的SQL查询:
select u.user_id as 'prop:User id', u.user_username as 'prop:username', u.user_email as 'Identity',u.user_created as 'Timestamp', us.user_subscription_expires as 'prop:Expires on', us.user_subscription_payment_provider as 'prop:Payment provider', us.user_subscription_modified, ud.user_detail_signup_country_iso3 as 'prop:Country'
from user u
left outer join user_subscription us
on u.user_id = us.user_subscription_user_id
left outer join user_detail ud
on u.user_id = ud.user_detail_user_id
答案 0 :(得分:0)
我建议使用其他方法:
select
'your selected columns'
from
user u,
u_subscription us,
u_detail ud
where
u.user_id = us.user_id and
u.user_id = ud.user_id
这就像join方法一样,但对我来说,这个方法使查询更清晰,更容易理解..希望它有所帮助!
答案 1 :(得分:0)
由于您专门寻找某些细节/付款,请使用该表作为查询的基础,然后加入到用户表,因为细节只存在于用户...但是,您可以离开 - 如果是有条件的,请加入订阅。像
这样的东西select
u.*,
ud.*,
us.*
from
u_detail ud
join user u
on ud.user_id = u.user_id
left join u_subscription us
on ud.user_id = us.user_id
由于userID从用户详细信息到用户表是相同的,因此只需使用相同的方法加入订阅表即可。我通常不会在字段中使用“*”,而是从中选择你想要的内容。
答案 2 :(得分:0)
我发现你的查询没有任何缺陷。它应该按预期工作。
我怀疑subscription
和detail
表中每个用户的行数不超过一行。这就是为什么你的left join
每个用户只产生一行(如果它是一个内连接,它会产生最多每个用户一行)。