让sql语句不排序,按照in语句的顺序返回结果
来源:互联网 发布:angularjs遍历json 编辑:程序博客网 时间:2024/04/25 12:55
让sql语句不排序,按照in语句的顺序返回结果
有时候我们需要按照in条件里的id顺序输出结果,可sql语句在不加order by的时候是按照asc排序的,下边的sql解决按照in条件顺序的id输出查询结果
mysql写法:
SELECT * FROM EVENT WHERE eventId 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 查询的时候,如果用到了 IN ,那么查询结果中的顺序并不是按照 IN 后面所给的顺序返回,而是按照默认的升序排列。如下:
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)
而如果想要让查询结果按照 IN 里面给的顺序的话,这里有几种方法:
转自:@喵了个咪
一、使用 FIND_IN_SET 建立一个派序列:
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)
下面这样可以看到 FIND_IN_SET 的操作方式:也就是 FIND_IN_SET 这个函数返回一个 1-n 递增的字符串,而ORDER BY 这个字符串就相当于是按升序排列了,而这个 1-n 对应着给入的那些 id
01
mysql> SELECT
id
,name,FIND_IN_SET(
id
,
'343,123,32,10,6,981,651,98,129'
) AS sort_order 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 | 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 查询结果集:
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
-> WHERE table2.
id
IN (343,123,32,10,6,981,651,98,129);
14
+-----+------+--------+
15
|
id
|
id
| name |
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 :
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语句的顺序返回结果mysql:SELECT*FROMEVENTWHER
- 让sql语句不排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- 让sql语句不排序,按照in语句的顺序返回结果
- 如何让SQL语句不执行默认排序,而是按照in语句的顺序返回结果
- sql语句 不让得出的结果默认排序,让其按照in语句的顺序返回结果
- sql语句 不让结果排序,按照in语句的顺序返回结果
- SQL 语句中按照in语句原有的顺序进行排序
- SQL 语句中按照in语句原有的顺序进行排序
- sql in查询结果按照in的条件排序返回
- sql 语句按照汉字顺序排序
- select语句返回结果的顺序问题
- 按照查询结果中某列出现的次数进行排序的SQL语句
- MySQL 查询in操作,查询结果按in集合顺序显示的SQL语句(笔记)
- Eclipse is running in a JRE, but a JDK is required 解决方法
- Android 常用的语言代码与国家地区对照表
- C自定义函数的可变参数列表实现 Windows APIS目录遍历程序 [李园7舍_404]
- 认识OpenMP
- eclipse操作方面的一些小笔记
- 让sql语句不排序,按照in语句的顺序返回结果
- 系统方面
- Vim 练级攻略
- 黑马程序员 WPF编程概述
- CV牛人 计算机视觉相关会议资源
- struts2中的国际化
- maven学习笔记(五)nexus私服-创建hosted仓库
- Mysql 存储过程
- cocos2d-x苦思冥想连连看