让sql语句不排序,按照in语句的顺序返回结果
2013-12-10 16:11
483 查看
让sql语句不排序,按照in语句的顺序返回结果
2013-01-16 10:15506人阅读 评论(1)收藏
举报
有时候我们需要按照in条件里的id顺序输出结果,可sql语句在不加order by的时候是按照asc排序的,下边的sql解决按照in条件顺序的id输出查询结果
mysql写法:
SELECT * FROM EVENT WHEREeventId IN(443,419,431,440,420,414,509) ORDER BY INSTR(',443,419,431,440,420,414,509,',CONCAT(',',eventId,','))
oracle写法:
select name from order where oderid in(111,222,333,444,555,666)order by instr('111,222,333,444,555,666',orderid)
sqlserver写法:
Select * From Product Where id in (1,1588,15782,9887,54) Order By charindex(','+ id +',', ',1,1588,15782,9887,54,')
---------------------------------------------------------------------------------------------------------------------------------------------
作者:
straul 日期: 2011 年 12 月 16 日 发表评论 (1)
查看评论
在用 SELECT 查询的时候,如果用到了 IN ,那么查询结果中的顺序并不是按照 IN 后面所给的顺序返回,而是按照默认的升序排列。如下:
view source
print?
01 | mysql> SELECT* FROM test WHERE id IN (343,123,32,10,6,981,651,98,129); |
02 | +-----+--------+ |
03 | | id |name | |
04 | +-----+--------+ |
05 | |6 |URdhMl | |
06 | |10 |Xl[hJq | |
07 | |32 |u^]~%p | |
08 | |98 |Uq`InZ | |
09 | |123 |yv](Ff | |
10 | |129 |Owx_mt | |
11 | |343 |=P3w,m | |
12 | |651 |zR!yD= | |
13 | |981 |5%$EuH | |
14 | +-----+--------+ |
15 | 9 rows in set (0.00 sec) |
转自:@喵了个咪
一、使用 FIND_IN_SET 建立一个派序列:
view sourceprint?
01 | mysql> SELECT* FROM test WHERE id IN (343,123,32,10,6,981,651,98,129) ORDER BY FIND_IN_SET( id , '343,123,32,10,6,981,651,98,129' ); |
02 | +-----+--------+ |
03 | | id |name | |
04 | +-----+--------+ |
05 | |343 |=P3w,m | |
06 | |123 |yv](Ff | |
07 | |32 |u^]~%p | |
08 | |10 |Xl[hJq | |
09 | |6 |URdhMl | |
10 | |981 |5%$EuH | |
11 | |651 |zR!yD= | |
12 | |98 |Uq`InZ | |
13 | |129 |Owx_mt | |
14 | +-----+--------+ |
15 | 9 rows in set (0.00 sec) |
view source
print?
01 | mysql> SELECT id ,name,FIND_IN_SET( id , '343,123,32,10,6,981,651,98,129' ) AS sort_order FROM test
id IN (343,123,32,10,6,981,651,98,129) ORDER BY FIND_IN_SET( id , '343,123,32,10,6,981,651,98,129' ); |
02 | +-----+--------+------------+ |
03 | | id |name |sort_order | |
04 | +-----+--------+------------+ |
05 | |343 |=P3w,m |1 | |
06 | |123 |yv](Ff |2 | |
07 | |32 |u^]~%p |3 | |
08 | |10 |Xl[hJq |4 | |
09 | |6 |URdhMl |5 | |
10 | |981 |5%$EuH |6 | |
11 | |651 |zR!yD= |7 | |
12 | |98 |Uq`InZ |8 | |
13 | |129 |Owx_mt |9 | |
14 | +-----+--------+------------+ |
15 | 9 rows in set (0.00 sec) |
二、自己构建一个顺序 id 表,左连接 IN 查询结果集:
view sourceprint?
01 | mysql> SELECT* FROM( |
02 | -> SELECT 343 AS id UNION |
03 | -> SELECT 123 UNION |
04 | -> SELECT 32 UNION |
05 | -> SELECT 10 UNION |
06 | -> SELECT 6 UNION |
07 | -> SELECT 981 UNION |
08 | -> SELECT 651 UNION |
09 | -> SELECT 98 UNION |
10 | -> SELECT 129 |
11 | -> ) AS table1 |
12 | -> LEFT JOIN test table2 ON table1. id =table2. id |
13 | -> WHEREtable2. id IN (343,123,32,10,6,981,651,98,129); |
14 | +-----+------+--------+ |
15 | | id | id
|
16 | +-----+------+--------+ |
17 | |343 |343 |=P3w,m | |
18 | |123 |123 |yv](Ff | |
19 | |32 |32 |u^]~%p | |
20 | |10 |10 |Xl[hJq | |
21 | |6 |6 |URdhMl | |
22 | |981 |981 |5%$EuH | |
23 | |651 |651 |zR!yD= | |
24 | |98 |98 |Uq`InZ | |
25 | |129 |129 |Owx_mt | |
26 | +-----+------+--------+ |
27 | 9 rows in set (0.00 sec) |
三、使用 UNION:
view sourceprint?
01 | mysql> SELECT* FROM test WHERE id =343 UNION |
02 | -> SELECT * FROM test WHERE id =123 UNION |
03 | -> SELECT * FROM test WHERE id =32 UNION |
04 | -> SELECT * FROM test WHERE id =10 UNION |
05 | -> SELECT * FROM test WHERE id =6 UNION |
06 | -> SELECT * FROM test WHERE id =981 UNION |
07 | -> SELECT * FROM test WHERE id =651 UNION |
08 | -> SELECT * FROM test WHERE id =98 UNION |
09 | -> SELECT * FROM test WHERE id =129; |
10 | +-----+--------+ |
11 | | id |name | |
12 | +-----+--------+ |
13 | |343 |=P3w,m | |
14 | |123 |yv](Ff | |
15 | |32 |u^]~%p | |
16 | |10 |Xl[hJq | |
17 | |6 |URdhMl | |
18 | |981 |5%$EuH | |
19 | |651 |zR!yD= | |
20 | |98 |Uq`InZ | |
21 | |129 |Owx_mt | |
22 | +-----+--------+ |
23 | 9 rows in set (0.00 sec) |
相关文章推荐
- 让sql语句不排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- 让sql语句结果集不排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- sql语句 不让结果排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果mysql:SELECT*FROMEVENTWHER
- sql语句 不让得出的结果默认排序,让其按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- 如何让SQL语句不执行默认排序,而是按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- SQL按照in语句的顺序返回结果
- SQL 语句中按照in语句原有的顺序进行排序
- SQL 语句中按照in语句原有的顺序进行排序
- SQL 语句中按照in语句原有的顺序进行排序
- [导入]实现SQL语句中,按照in 中的顺序排序的方法
- 按照查询结果中某列出现的次数进行排序的SQL语句
- sql in查询结果按照in的条件排序返回