Mysql

顯式指定 MySQL 查詢的排序順序(使用“IN”列表)

  • August 24, 2020

使用如下查詢,預設值將按 id 從小到大的順序返回,即使IN列表不是按該順序。在我的情況下,該列表將由一些 c# 程式碼提供。

如何按IN列表中值的順序對結果集進行排序?

是)我有的:

SELECT * FROM example Where Id in (1,3,2);
returns: 
|---------------|---------------|
|       id      |    Value      |
|---------------|---------------|
|       1       |   example1    |
|---------------|---------------|
|       2       |   example2    |
|---------------|---------------|
|       3       |   example3    |
|---------------|---------------|

我想要的是:

SELECT * FROM example Where Id in (1,3,2)
        Order By "Magic code here";
returns: 
|---------------|---------------|
|       id      |    Value      |
|---------------|---------------|
|       1       |   example1    |
|---------------|---------------|
|       3       |   example3    |
|---------------|---------------|
|       2       |   example2    |
|---------------|---------------|

您有兩種方法可以做到這一點(請參閱此處的小提琴):

CREATE TABLE ex
(
 id INTEGER AUTO_INCREMENT PRIMARY KEY,
 value VARCHAR(10) NOT NULL
);

填充表格:

INSERT INTO ex (value) VALUES
('example1'), ('example2'), ('example3');

然後是“魔法醬”……

SELECT * FROM ex ORDER BY field (id, 1, 3, 2); 

結果:

id  value
1   example1
3   example3
2   example2

這是一個非標準的 MySQL“技巧”。

一種符合標準的方法是:

SELECT * FROM ex
ORDER BY 
 CASE id
   WHEN 1 THEN 1
   WHEN 2 THEN 3
   WHEN 3 THEN 2
 END;

結果:

id  value
1   example1
3   example3
2   example2

請參閱此處的 PostgreSQL 小提琴。PostgreSQL 是(可能)最符合標準的 RDBMS 系統之一,所以這就是我使用它進行比較的原因

ps 歡迎來到論壇!

引用自:https://dba.stackexchange.com/questions/274182