在SQL中,有没有一种方法可以组合
ORDER BY
和IS NULL
,以便我可以按第1列中的值(如果它不为空)进行排序;如果为空,则按另一列中的值排序?
您可以使用 case 表达式:
ORDER BY CASE
WHEN Column1 IS NOT NULL THEN Column1
ELSE Column2
END
或者对应的语法糖:
ORDER BY COALESCE(Column1, Column2)
结果将是这样的:
column1 | column2
--------|--------
1 | 1258
2 | 5972
null | 3
4 | 3698
5 | 7524
请注意,两列的数据类型必须是可比较的(RDBMS 定义了规则)。
试试这个
ORDER BY COALESCE(fieldA, fieldB);
您可以尝试以下方法:
ORDER BY ISNULL(firstField, secondField)
我没有任何可以测试它的Tables atm,但这可能有效,至少在没有可用数据的情况下是有效的:
SELECT * FROM table1
LEFT JOIN table2 ON table1.id = table2.id
WHERE 1
ORDER BY IF( table2.id, table1.id, table1.name )
而且我不知道如果table2.id有时为空,顺序会是什么样子,看起来很不稳定。