left联接返回的是顺序相反的重复元组

aydmsdu9  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(287)

我正在尝试查询包含以下列的数据库(不属于我):

NumEpoca (epoch), Turma(class), Dia (day - indicates day of the week), 
Hora (hour - each value indicates a 30mins time, a 3h class generate 6 tuples), 
Disciplina (course), TipoAula (type of class, theoretical or practical),     
Sala (classroom)

这基本上是一个课程表,所以对于一个给定的班级,在一周的同一天,我可以在一个星期上一节实践课,在另一个星期上一节理论课。
现在,我想得到一天的最小和最大小时数(这样我就可以计算出上课的开始和结束时间),但我也想得到他们的教室,我事先不知道是理论课还是实践课。
另外,有些课程只是实践性的,有些只是理论性的,所以我只想要一个教室。
我所做的询问,基本上给了我一切

LectureDetails(beginDate=2020-05-26 15:30:00, endDate=2020-05-26 18:30:00, classroom=L_H1/G.0.08)
LectureDetails(beginDate=2020-05-26 15:30:00, endDate=2020-05-26 18:30:00, classroom=G.0.08/L_H1)

正如你在这里看到的,我得到了相同的课程(在同一个小时开始和结束,两个教室teo和pract)。但是那天我只需要一个元组,我得到的是luh1/g0.08和g0.08/luh1。

"SELECT a1.Dia,MIN(a1.Hora),MAX(a1.Hora),a1.Sala, a2.Sala FROM Aulas as a1 LEFT JOIN Aulas as a2 " +
                    "on a1.Sala <> a2.Sala and a1.Disciplina = a2.Disciplina and a1.NumEpoca = a2.NumEpoca and a1.Turma = a2.Turma " +
                    "and a1.Dia= a2.Dia and a1.Hora = a2.Hora " +
                    "where NumEpoca = ? AND Turma = ? AND Disciplina=?  GROUP BY a1.Dia,a1.Sala,a2.Sala"

提前谢谢。

dgtucam1

dgtucam11#

您可以通过使用 a1.Sala < a2.Sala 而不是不平等。
但这并不是你想要的方法。尝试以下操作:

SELECT Dia, MIN(Hora), MAX(Hora),
    MIN(Sala),
    CASE WHEN MIN(Sala) = MAX(Sala) THEN NULL ELSE MAX(Sala) END
FROM Aulas
WHERE NumEpoca = ? AND Turma = ? AND Disciplina = ?
GROUP BY Dia

相关问题