我在我的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”。
我不应该是第一个遇到此问题的人,感谢帮助。