排序时如何使null成为最后一个

时间:2015-11-30 13:57:50

标签: sql

我有以下SQL问题。

SELECT * 
FROM   forum_l.entries 
       LEFT JOIN forum_h.user 
              ON forum_l.entries.uid = forum_h.user.userid 
ORDER  BY username 
LIMIT  $offSetRows, $nrOfrows; 

我得到了我想要的所有值,包括左表中的NULL。但我想按用户名订购。现在我先得到NULL或0。我怎样才能获得空值?

2 个答案:

答案 0 :(得分:0)

您可以在CASE

中使用ORDER BY
SELECT * 
FROM   forum_l.entries 
       LEFT JOIN forum_h.user 
              ON forum_l.entries.uid = forum_h.user.userid 
ORDER  BY CASE WHEN username IS NULL OR username = '' THEN 1 ELSE 0 END ASC,
         username ASC
LIMIT  $offSetRows, $nrOfrows; 

我认为“NULL或0”表示NULL或长度为0的用户名。

答案 1 :(得分:0)

最简单的方法是使用支持NULLS FIRST子句中ANSI标准ORDER BY语法的数据库。除此之外,您可以使用条件表达式明确地执行此操作:

ORDER BY (CASE WHEN username IS NULL THEN 1 ELSE 2 END),
         username

在MySQL中,您可以将其简化为:

ORDER BY (username IS NULL) DESC, username

我不确定你的意思是“0”,因为username可能是一个字符串。但是,您可以使用相同的方法将任何值放在第一位或最后一位。