【发布时间】: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