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