IN()子句中的PostgreSQL ORDER BY值

Cor*_*rey 5 mysql arrays postgresql

好的,有一些关于如何做到这一点的答案.但所有答案都假设查询选择了全部.如果您有明确的选择,则方法不再有效.

请参阅此处了解该方法:在Postgresql中模拟MySQL的ORDER BY FIELD()

基本上我有

SELECT DISTINCT id 
FROM items 
WHERE id IN (5,2,9) 
ORDER BY
 CASE id
  WHEN 5 THEN 1 
  WHEN 2 THEN 2
  WHEN 9 THEN 3
 END
Run Code Online (Sandbox Code Playgroud)

当然,这打破并说

"PGError:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中"

有没有办法按照IN子句中的值的顺序在PostgreSQL中排序查询结果?

a_h*_*ame 7

您可以将其包装到派生表中:

SELECT *
FROM (
  SELECT DISTINCT id 
  FROM items 
  WHERE id IN (5,2,9) 
) t
ORDER BY
 CASE id
  WHEN 5 THEN 1 
  WHEN 2 THEN 2
  WHEN 9 THEN 3
 END
Run Code Online (Sandbox Code Playgroud)