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的顺序排列查询结果的主要内容,如果未能解决你的问题,请参考以下文章