【问题标题】:How to access parent column from a subquery within a join如何从联接中的子查询访问父列
【发布时间】:2017-01-27 11:06:36
【问题描述】:

我正在尝试根据用户的 id 离开加入第二张表 useri_ban,附加条件为:useri_ban.start_ban = max_start

为了让我计算max_start,我必须运行以下子查询:

(SELECT MAX(ub.start_ban) AS max_start, user_id FROM useri_ban ub WHERE ub.user_id = useri.id)

此外,为了将max_start 添加到每一行,我需要将此子查询的结果内连接到主结果中。但是,似乎一旦我应用了该联接,子查询就无法再访问useri.id

我做错了什么?

SELECT
    useri.id as id,
    useri.email as email,
    useri_ban.warning_type_id as warning_type_id,
    useri_ban.type as type,
    useri.created_at AS created_at
FROM `useri`

inner join 
(SELECT MAX(ub.start_ban) AS max_start, user_id FROM useri_ban ub WHERE ub.user_id = useri.id) `temp`
     on `useri`.`id` = `temp`.`user_id`

left join `useri_ban` on `useri_ban`.`user_id` = `useri`.`id` and `useri_ban`.`start_ban` = `max_start`

【问题讨论】:

  • 第一步:确保子查询中你需要的数据被保留。步骤 2:给子表一个别名。第三步:在外部选择中引用别名表

标签: mysql join subquery correlated-subquery


【解决方案1】:

这能解决您的问题吗?您需要在内部查询中使用 GROUP BY 而不是另一个联接。

SELECT useri.id, useri.email, maxQuery.maxStartBan
    FROM useri  
    INNER JOIN
    (
    SELECT useri_ban.user_id ubid, MAX(useri_ban.startban) maxStartBan
        FROM useri_ban 
            GROUP BY useri_ban.user_id
    ) AS maxQuery
        ON maxQuery.ubid = useri.id;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多