我在MySQL中有一个表,其中包含如下数据:
id name first_name
===============================
1 hello
2 many
3 alive
4 persons
如何使结果看起来像这样
id name first_name
===============================
3 alive
1 hello
2 many
4 persons
那么,排序应该是名称和/或first_name的字母?
答案 0 :(得分:2)
以下查询可以完成这项工作。
SELECT *
FROM nameTable
ORDER BY IFNULL(name,first_name)
OR
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
函数接受两个参数,如果不是NULL
则返回第一个参数,如果第一个参数是NULL
则返回第二个参数。
COALESCE
函数可以接受两个或更多参数并返回第一个非NULL
参数,如果所有参数都是null
,则返回NULL。
答案 1 :(得分:1)
我找到了解决方案,订单应该看起来像
order by coalesce(name,first_name)
答案 2 :(得分:0)
创建一个sortby列,它是另外两列的串联。
SELECT id, `name`, first_name, CONCAT(IFNULL(`name`,''),IFNULL(first_name,'')) AS sortby
FROM
table1
ORDER BY sortby
答案 3 :(得分:0)
使用此
SELECT * FROM A ORDER BY CONCAT(name,first_name) ASC