在sql join中排序

时间:2016-06-24 16:00:29

标签: mysql sql

我有一个SQL查询,它可以准确返回我需要的数据。但是,我在Order By上遇到了麻烦。我想我可能需要某种嵌套选择或Group By,但我从来没有做过其中一种,所以我想知道是否有人可以提供帮助。数据需要首先按centre_id排序,然后按learner_name排序,然后按journey_centre_start排序,但它似乎只按centre_id和learner_name排序,并忽略journey_centre_start的排序。

Journey_centre_start是数据库中具有NULL默认值的日期类型。

SELECT a.learner_id
     , a.learner_name
     , a.centre_id
     , a.learner_status
     , b.journey_id
     , c.journey_centre_start
  FROM learner a
  JOIN learner_journey b  
    ON a.learner_id = b.learner_id
  JOIN journey c 
    ON b.journey_id = c.journey_id
 WHERE a.centre_id != 999
   AND a.learner_status = 'complete'
 ORDER 
    BY a.centre_id ASC 
     , a.learner_name ASC 
     , c.journey_centre_start ASC;

2 个答案:

答案 0 :(得分:1)

如果您希望journey_centre_start中的NULL值位于列表的底部,那么您可以在订购时添加CASE语句。

  SELECT a.learner_id
 , a.learner_name
 , a.centre_id
 , a.learner_status
 , b.journey_id
 , c.journey_centre_start
  FROM learner a
 JOIN learner_journey b  
  ON a.learner_id = b.learner_id
 JOIN journey c 
  ON b.journey_id = c.journey_id
 WHERE a.centre_id != 999
 AND a.learner_status = 'complete'
 ORDER 
 BY a.centre_id ASC 
 , a.learner_name ASC 
 , CASE WHEN c.journey_centre_start IS NULL THEN 2 ELSE 1 END
 , c.journey_centre_start ASC

答案 1 :(得分:0)

感谢所有回复我帖子的人。通过谈论它实际上告诉我,解决方案非常简单。我只需要将Order By语句更改为: 按顺序a.centre_id ASC,c.journey_centre_start ASC,a.learner_name ASC,它给了我想要的结果。 最诚挚的问候你们。