2016-02-12 67 views
2

我有一个表在MySQL中包含一些数据: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 

因此,排序应该是姓名和/或名字的字母?

回答

1

我找到了解决办法,顺序通过应该像

order by coalesce(name,first_name) 
+0

如果值为空字符串而不是null,则不起作用。 @ randyh22解决方案适用于null或空字符串。 – randyh22

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。

+0

如果值是空字符串,而不是空这些解决方案不起作用。 @ randyh22解决方案适用于null或空字符串。 – randyh22

0

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

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

使用本

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

如果值为空而不是空字符串,则这不起作用。 @ randyh22解决方案适用于null或空字符串。 – randyh22