【发布时间】:2019-02-19 03:28:01
【问题描述】:
我有 3 个通过代码关联的表,像这样
我想通过根据更新注册日期对重复行进行分组来获得我的 3 个相关表的结果。我试过这个加入他们
SELECT
stu.code,
stu.name,
stu.lastname,
adr.address,
adr.phone,
adr.register_date,
uni.university,
uni.degree,
uni.register_date
FROM student stu
INNER JOIN
address adr
ON adr.code = stu.code
INNER JOIN (
SELECT code, MAX(register_date) reg_date
FROM address
GROUP BY code
) max_address
ON max_address.code = adr.code
AND max_address.reg_date = adr.register_date
LEFT JOIN
university uni
ON uni.code = stu.code
LEFT JOIN (
SELECT code, MAX(register_date) reg_date
FROM university
GROUP BY code
) max_uni
ON max_uni.code = uni.code
AND max_uni.reg_date = uni.register_date
此代码返回...
我只想返回每个学生的最大注册日期(地址和大学表)的行,这将是带有红色箭头的行,即使有些学生在大学表?
如您所见,它发生在“Brandon Walker”中,大学表中没有 854 代码,并且在这些字段中显示 NULL,但没有按 Olivia 和 John 的记录分组,因为我是使用 LEFT JOIN 从 Brandon 带来那些“NULL”记录。
如果我使用INNER JOIN,它根本不会检索 Brandon Walker 寄存器
INNER JOIN
university uni
ON uni.code = stu.code
INNER JOIN (
SELECT code, MAX(register_date) reg_date
FROM university
GROUP BY code
) max_uni
ON max_uni.code = uni.code
AND max_uni.reg_date = uni.register_date
更具体地说,我想在我的查询中返回这个
关于如何实现这一点的任何建议?
【问题讨论】:
-
类似this。如果一个学生的多个大学的注册日期相同,会发生什么情况?
标签: mysql subquery left-join inner-join