繁体   English   中英

“WHERE字段IN”SQL查询的顺序?

[英]Order of “WHERE field IN” SQL query?

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

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

结果顺序等于“ORDER BY id ASC”,因此在示例中返回记录1,3,22。 如何以IN子句中输入的确切方式对它们进行排序? 订购为3,22,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);

参考:

尝试使用ORDER BY FIELD ,例如:

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

来源于此

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

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) 3,22,1)返回相同的结果,实际上更整洁。

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

ORDER BY FIELD( id ,'3','22','1')???

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM