Postgresql-9.6 SELECT * FROM表WHERE值IN数组保留其顺序

时间:2019-08-29 21:08:27

标签: sql sorting sql-order-by postgresql-9.6

我在我的postgresql-9.6.5数据库中再次运行以下查询。我想收到保留数组顺序的结果(“ dpmYLNG”,“ upXGxTB”,“ tNV4rd5”,“ 8o6Zejg”)。

SELECT taxi.id as taxi_id
FROM taxi
LEFT OUTER JOIN public.vehicle v ON (v.id = taxi.vehicle_id)
LEFT OUTER JOIN public.vehicle_description vd ON (v.id = vd.vehicle_id)
WHERE
vd.special_need_vehicle != true
AND vd.type_ != 'mpv'
AND taxi.id IN ('dpmYLNG', 'upXGxTB', 'tNV4rd5', '8o6Zejg');

我发现了参考问题:ORDER BY the IN value list,但我不认为ORDER BY POSITION适用于字符串。

我的第二种方法是使用一个函数:WITH ORDINALITY,但是我对Postgresql中的函数并不真正熟悉。 https://www.postgresql.org/docs/current/functions-srf.html

我尝试使用ORDER BY POSITION关键字失败。

SELECT taxi.id as taxi_id
FROM taxi
LEFT OUTER JOIN public.vehicle v ON (v.id = taxi.vehicle_id)
LEFT OUTER JOIN public.vehicle_description vd ON (v.id = vd.vehicle_id)
WHERE
vd.special_need_vehicle != true
AND vd.type_ != 'mpv'
AND taxi.id IN ('dpmYLNG', 'upXGxTB', 'tNV4rd5', '8o6Zejg')
ORDER BY POSITION(id::text IN "('tNV4rd5', '8o6Zejg')");

我收到以下错误消息:

SQL Error [42703]: ERROR: column "('tNV4rd5', '8o6Zejg')" does not exist Position: 372.

我想接收值:“ tNV4rd5”,但我要接收值:“ 8o6Zejg”。

我不应该是第一个遇到此问题的人,感谢帮助

0 个答案:

没有答案