2016-02-12 64 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