SQL查询,以查找每个user_id

时间:2019-12-29 02:27:23

标签: mysql sql

我目前正在从4个不同的表中进行查询,

usersmemberships_usersmembership_levelsphone_area_code

我要从users表中选择

id
user_login,
user_email,
display_name

memberships_users表包含一个user_id列以及一个id列。 user_id列不是唯一的,并且有很多重复的用户ID。

我要从memberships_users表中选择

initial_payment,
billing_amount,
cycle_period,
cycle_number,

从每个id到最大user_id的行中

namemembership_levels表和

meta_value来自phone_area_code

所有应该与users表中的ID相关的

请帮助!

1 个答案:

答案 0 :(得分:1)

这基本上是获取所需内容的一种方法的伪代码。

首先,从成员资格表中创建每个user_id和max(id)的派生表。这将产生与成员资格中关联的最大id对齐的所有不同的user_id。下一步是将两个物理表与派生表连接在一起,以获取用户,并且关联的成员资格记录包含最大成员资格ID。

注意:如果您的memberships_users表很大,那么将max_membership_id数据放入临时表并添加适当的索引,您将获得更好的性能。

;WITH max_membership_id AS
(
    SELECT user_id, max_id = MAX(id)
    FROM memberships_users
    GROUP BY user_id            
)
SELECT 
    u.id, u.user_login, u.user_email, u.display_name,
    mu.initial_payment, mu.billing_amount, mu.cycle_period, mu.cycle_number
FROM
    users u
    INNER JOIN max_membership_id mmi ON mmi.user_id = u.user_id
    INNER JOIN memberships_users mu ON mu.id = mmi.max_id