Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从单个表中进行双排序选择_Sql_Mysql - Fatal编程技术网

Sql 从单个表中进行双排序选择

Sql 从单个表中进行双排序选择,sql,mysql,Sql,Mysql,我有一个表,id作为主键,描述作为另一个字段 我想首先选择具有id4的记录,按描述排序。到不了那里 您可能需要使用id您可以使用UNION select *, id<=4 as low from table order by low, description 或 +1我喜欢这个,我对这类东西的第一个想法总是联合,而不是考虑更圆滑的解决方案。为什么不直接按id订购@Daniel:因为最初OP没有提到任何关于数据库的内容。这个技巧在mysql中可能是有效的,我相信它是一个扩展?,但是,例如,

我有一个表,id作为主键,描述作为另一个字段

我想首先选择具有id4的记录,按描述排序。到不了那里

您可能需要使用id您可以使用UNION

select *, id<=4 as low from table order by low, description


+1我喜欢这个,我对这类东西的第一个想法总是联合,而不是考虑更圆滑的解决方案。为什么不直接按id订购@Daniel:因为最初OP没有提到任何关于数据库的内容。这个技巧在mysql中可能是有效的,我相信它是一个扩展?,但是,例如,在MS SQL Server中,比较的结果是一个布尔值,不能以这种方式使用,因此案例是必须的。哦,你是对的。我看到[mysql]标签是后来添加的。是的,它在SQL Server中不起作用,但在MySQL中,ORDER BY语法允许任何有效的表达式。。。不管怎样,你的+1更具可移植性。这很好,即使它返回一个不需要的列。因为联合MySQl之前的ORDER BY,第一个列不起作用。第二个很好。哦,我的错。。联合版本已修复。
SELECT * FROM your_table ORDER BY id <= 4 DESC, description;
CREATE TABLE your_table (id int, description varchar(50));

INSERT INTO your_table VALUES (1, 'c');
INSERT INTO your_table VALUES (2, 'a');
INSERT INTO your_table VALUES (3, 'z');
INSERT INTO your_table VALUES (4, 'b');
INSERT INTO your_table VALUES (5, 'g');
INSERT INTO your_table VALUES (6, 'o');
INSERT INTO your_table VALUES (7, 'c');
INSERT INTO your_table VALUES (8, 'p');
+------+-------------+
| id   | description |
+------+-------------+
|    2 | a           |
|    4 | b           |
|    1 | c           |
|    3 | z           |
|    7 | c           |
|    5 | g           |
|    6 | o           |
|    8 | p           |
+------+-------------+
8 rows in set (0.00 sec)
select id, descr
from t
order by 
 case when id <= 4 then 0 else 1 end, 
 descr
select id, description
from MyTable
order by case when id <= 4 then 0 else 1 end, description
SELECT * FROM (SELECT * FROM table1 WHERE id <=4 ORDER by description)aaa
UNION
SELECT * FROM (SELECT * FROM table1 WHERE id >4 ORDER by description)bbb
SELECT * FROM table1
ORDER BY
CASE WHEN id <=4 THEN 0
ELSE 1
END, description