MySQL 按 or 子句中的两列排序

MySQL order by two columns in or-clause

我在 MySQL 中有一个 table,其中包含如下数据:

id name      first_name
===============================
1  hello     
2            many
3            alive
4  persons

如何让结果看起来像这样

id name      first_name
===============================
3            alive
1  hello     
2            many
4  persons

因此,名称应该按字母顺序排序 and/or first_name?

下面的查询就可以完成这项工作。

SELECT *
FROM nameTable
ORDER BY IFNULL(name,first_name)

SELECT *
FROM nameTable
ORDER BY coalesce(name,first_name)

N:B: 如果无法访问 SQL FIDDLE.

CREATE TABLE `nameTable` (
`ID`  int(11) NOT NULL AUTO_INCREMENT ,
`name`  varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL ,
`first_name`  varchar(50) CHARACTER SET latin1 COLLATE latin1_general_ci NULL DEFAULT NULL ,
PRIMARY KEY (`ID`)
);

INSERT INTO `nametable` VALUES ('1', 'hello', null);
INSERT INTO `nametable` VALUES ('2', null, 'many');
INSERT INTO `nametable` VALUES ('3', null, 'alive');
INSERT INTO `nametable` VALUES ('4', 'persons', null);

注:

两者之间的主要区别是 IFNULL 函数有两个参数,returns 第一个参数如果不是 NULL 或第二个参数如果第一个参数是 NULL.

COALESCE 函数可以接受两个或更多参数和 returns 第一个非 NULL 参数,如果所有参数都是 null.[=20= 则为 NULL ]

我找到了解决方案,顺序应该是这样的

order by coalesce(name,first_name)

创建一个 sortby 列,它是其他两个列的串联。

SELECT id, `name`, first_name, CONCAT(IFNULL(`name`,''),IFNULL(first_name,'')) AS sortby
FROM
table1
ORDER BY sortby

使用这个

SELECT * FROM A ORDER BY CONCAT(name,first_name) ASC