0

我有一个通过 连接几个表的 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
4

3 回答 3

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 方法一样工作,但对我来说,这种方法使查询更清晰,更容易理解..希望它有所帮助!

于 2013-10-07T15:19:24.230 回答
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

由于从用户详细信息到用户表的用户 ID 相同,因此只需使用相同的方式加入订阅表即可。我通常不会对字段使用“*”,而是从中选择你想要的。

于 2013-10-07T15:19:47.040 回答
0

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

我怀疑and表中每个用户不超过一行。这就是为什么您为每个用户只生成一行(如果它是一个内部连接,它会为每个用户最多生成一行)。subscriptiondetailleft join

于 2013-10-07T15:29:35.647 回答