加入具有特定订单的表格

时间:2014-08-14 09:27:48

标签: mysql

我有两张桌子,例如:老师和学生以及桌子LastViewedPupil,其中包含观看他的字段和何时(teacherId& pupilId)。所以我想返回按上次查看日期排序的学生列表,但是LastViewedPupil中并没有所有学生,但是最后几个例如,我想在按日期排序之后显示所有左侧记录,无论是哪个顺序,我怎样才能做到这一点?

我可以不用像

那样的最后一部分
select * from Pupil as p, (
    select * from LastViewedPupil lvp where lvp.teacherId = 5 ORDER BY lastViewDate
) as lvp where lvp.pupilId = p.pupilId;  

或者我应该在LastViewDatePupil中为所有学生添加相应的记录还是需要加入表本身(听起来很尴尬)?

1 个答案:

答案 0 :(得分:2)

你应该尝试这个:

SELECT p.*
LEFT JOIN LastViewedPupil lvp ON p.id = lvp
WHERE lvp.teacher_id = 5
ORDER BY lvp.lastViewDate DESC

我不确定该查询是将NULL放在开头还是结尾。如果没有正确排序结果,请尝试另一个。我使用CASE来重新排序数据

SELECT p.*, 
   CASE WHEN lvp.lvp.lastViewDate IS NULL THEN 1 ELSE 0, END AS notNullfirst FROM Pupil p
LEFT JOIN LastViewedPupil lvp ON p.id = lvp
WHERE lvp.teacher_id = 5
ORDER BY notNullfirst, lvp.lastViewDate DESC