MySQL在or-clause

时间:2016-02-12 10:10:11

标签: mysql sql-order-by multiple-columns

我在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的字母?

4 个答案:

答案 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