gpt4 book ai didi

MYSQL 左连接相关表

转载 作者:行者123 更新时间:2023-11-29 11:48:59 25 4
gpt4 key购买 nike

我有 4 个表和一个 SQL,它返回的几乎是我想要的。它涉及最大日期以及相关表和中间表。最后一个问题得到了解答,但我意识到我需要更多的 sql 功能,如果相关表中没有 id_aluno 外键的记录,则返回 null。

table: Aluno
id_aluno nome
1 Bruno
2 Carlos
3 Fernando

table: Serie
id_serie id_aluno descricao
1 1 Tipo A
2 1 Tipo B
3 2 Tipo A

table: Treino
id_treino id_serie data
1 1 2015-12-10
2 2 2015-12-12
3 3 2015-12-10

table: Avaliacao
id_avaliacao id_aluno data_avaliacao
1 1 2015-12-07
2 1 2015-12-01
3 2 2015-12-05
4 2 2015-12-04

我想要以下结果:

nome        descricao    data          data_avaliacao
Bruno TIPO B 2015-12-12 2015-12-07
Carlos TIPO A 2015-12-10 2015-12-05
Fernando null null null

但是如果相关表上没有数据,以下 SQL 不会返回“aluno”(a.nome)。我尝试了 LEFT JOIN,但这不是我想要的方式。

SELECT a.nome, s.descricao, t.data, v.data_avaliacao
FROM aluno a
JOIN serie s
ON s.id_aluno = a.id_aluno
JOIN treino t
ON t.id_serie = s.id_serie
JOIN
( SELECT s.id_aluno
, MAX(t.data) max_data
FROM serie s
JOIN treino t
ON t.id_serie = s.id_serie
GROUP
BY id_aluno
) x
ON x.id_aluno = s.id_aluno
AND x.max_data = t.data
JOIN avaliacao v
ON s.id_aluno = v.id_aluno
WHERE v.data_avaliacao IN
( SELECT MAX(v.data_avaliacao) max_data1
FROM avaliacao v
GROUP
BY id_aluno
)

希望能帮到你。谢谢

最佳答案

尝试这样的事情

SELECT nome, 
descricao,
data,
data_avaliacao
FROM aluno A
LEFT OUTER JOIN serie S
ON A.id_aluno = S.id_aluno
LEFT OUTER JOIN (SELECT s.id_aluno,
Max(t.data) data
FROM serie s
JOIN treino t
ON t.id_serie = s.id_serie
GROUP BY id_aluno) T
ON T.id_aluno = A.id_aluno
LEFT OUTER JOIN (SELECT Max(v.data_avaliacao) data_avaliacao,
id_aluno
FROM avaliacao v
GROUP BY id_aluno) V
ON v.id_aluno = A.id_aluno

关于MYSQL 左连接相关表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480178/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com