Mysql
顯式指定 MySQL 查詢的排序順序(使用“IN”列表)
使用如下查詢,預設值將按 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 歡迎來到論壇!