У меня есть 3 таблицы, связанные по коду, например:
![enter image description here](https://i.stack.imgur.com/2NIuk.png)
Я хочу получить результат из 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
Этот код возвращает ...
![enter image description here](https://i.stack.imgur.com/IvYLq.jpg)
Я просто хочу вернуть строкис максимальной датой регистрации (таблицы адресов и университетов) на одного учащегося, которая будет с красными стрелками. Как я могу это сделать, даже если у некоторых студентов нет строки в университетской таблице?
КакВы можете видеть, что это происходит с "Брэндоном Уолкером", в университетской таблице нет кода 854, и он отображает NULL в этих полях, но не группируется по записям Оливии и Джона, потому что я использую LEFT JOIN
для того, чтобы принести эти «пустые» записи от Брэндона.
Если я использую INNER JOIN
, он вообще не получит регистр Брэндона Уокера
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
![enter image description here](https://i.stack.imgur.com/GVkmR.jpg)
Если быть более точным, я хочу вернуть это в своем запросе
![enter image description here](https://imagizer.imageshack.com/img924/2584/JTYXpf.png)
Любое предложение о том, как этого добиться