让SQL Query不分组结果

时间:2013-10-07 15:08:28

标签: mysql sql join

我有一个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

3 个答案:

答案 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)

我发现你的查询没有任何缺陷。它应该按预期工作。

我怀疑subscriptiondetail表中每个用户的行数不超过一行。这就是为什么你的left join每个用户只产生一行(如果它是一个内连接,它会产生最多每个用户一行)。