sql in怎么根据in的顺序排列查询结果

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql in怎么根据in的顺序排列查询结果相关的知识,希望对你有一定的参考价值。

按指定顺序输出数据,可以使用order by charindex(','+convert(varchar,ID)+',',',3,1,2,5,4,')的方法来实现这个目的

1
2
3
4

select id,title
from tbname
where id in (3,1,2,5,4)
order by charindex(','+convert(varchar,ID)+',',',3,1,2,5,4,')
参考技术A mysql中的排序是这样:
select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);

“WHERE field IN”SQL 查询的顺序?

【中文标题】“WHERE field IN”SQL 查询的顺序?【英文标题】:Order of "WHERE field IN" SQL query? 【发布时间】:2010-10-24 23:50:49 【问题描述】:

我正在使用以下 SQL 从 MySQL 数据库中选择记录:

SELECT * FROM cms_product WHERE id IN (3,22,1);

结果顺序等于“ORDER BY id ASC”,因此返回示例记录 1、3、22。如何以在 IN 子句中输入的确切方式对它们进行排序?所以订购为 3,22,1 ?谢谢你。

【问题讨论】:

考虑寻找其他东西来订购您的记录。 ID 应允许更改或非静态。 How can I order a query result same as the id specified in the WHERE condition?的可能重复 【参考方案1】:

多种选择 -

案例:

首选,它是 ANSI-92,可移植到其他数据库。

  SELECT * 
    FROM cms_product 
   WHERE id IN (3,22,1)
ORDER BY CASE id
           WHEN 3 THEN 1
           WHEN 22 THEN 2
           WHEN 1 THEN 3
         END

FIND_IN_SET:

  SELECT * 
    FROM cms_product 
   WHERE id IN (3,22,1)
ORDER BY FIND_IN_SET(id, '3,22,1');

字段:

  SELECT * 
    FROM cms_product 
   WHERE id IN (3,22,1)
ORDER BY FIELD(id, 3, 22, 1);

参考:

CASE FIELD FIND_IN_SET

【讨论】:

【参考方案2】:

尝试使用ORDER BY FIELD,如:

SELECT * FROM cms_product WHERE id IN (3,22,1) ORDER BY FIELD (id, 3, 22, 1);

source here

【讨论】:

哦,实际文档。我不记得在我的阅读中偶然发现了这一点,所以谢谢你的链接:)【参考方案3】:

它可能不是很整洁,但您可能想要执行以下操作:

SELECT    * 
FROM      cms_product 
WHERE     id IN (3, 22, 1)
ORDER BY  id = 3 DESC, id = 22 DESC, id = 1 DESC;

测试用例:

CREATE TABLE cms_product (id int, value int);

INSERT INTO cms_product VALUES (1, 100);
INSERT INTO cms_product VALUES (3, 200);
INSERT INTO cms_product VALUES (22, 300);

结果:

+------+-------+
| id   | value |
+------+-------+
|    3 |   200 |
|   22 |   300 |
|    1 |   100 |
+------+-------+
3 rows in set (0.02 sec)

更新:

@Dave 和 @OMG Ponies 建议的 ... ORDER BY FIELD (id, 3, 22, 1) 返回相同的结果,实际上更简洁。

【讨论】:

非常怀疑这是否会扩展到很长的 IN 列表。【参考方案4】:

你不能,它必须是 ASC 或 DESC。

【讨论】:

【参考方案5】:

按字段排序(id, '3', '22', '1') ???

【讨论】:

以上是关于sql in怎么根据in的顺序排列查询结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL 子查询, 如何按照IN的顺序查询

让sql语句不排序,按照in语句的顺序返回结果

想问下,sql 按 in 后的顺序排序问题。

求一sql语句使数据按 where in 括号内的数据顺序排列

MongoDB地理空间查询结果未按距离顺序排列

SQL in的查询效率