目前我正在我的声明中做一个非常基本的orderderby。

SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC

这样做的问题是,“position”的NULL条目被视为0。因此,所有位置为NULL的条目都出现在位置为1,2,3,4的条目之前。例如:

NULL, NULL, NULL, 1, 2, 3, 4

有没有办法实现以下排序:

1, 2, 3, 4, NULL, NULL, NULL.

当前回答

我发现这在很大程度上是一个很好的解决方案:

SELECT * FROM table ORDER BY ISNULL(field), field ASC;

其他回答

我发现这在很大程度上是一个很好的解决方案:

SELECT * FROM table ORDER BY ISNULL(field), field ASC;

这对我来说也很有效。

ORDER BY ISNULL(field), field = 0 ASC;

返回 1 2 3. 0 0 零 零

空最后

SELECT * FROM table_name ORDER BY id IS NULL, id ASC

你可以在ORDER BY语句中合并null值:

select * from tablename
where <conditions>
order by
    coalesce(position, 0) ASC, 
    id DESC

如果希望null在底部排序,请尝试coalesce(position, 100000)。(使第二个数字大于db中所有其他位置的数字。)

这工作得很好:

SELECT * FROM tablename ORDER BY position = 0, position ASC;

position
1 
2
3
0
0