我有以下查询。
SELECT
mp.id
FROM
p_maint_prior pmp
JOIN maint_prior mp ON(pmp.cid=mp.cid AND pmp.main_pr_id = mp.id)
WHERE
pmp.property_id = 12345
AND pmp.cid = 235
AND pmp.remote_primary_key IS NOT NULL
ORDER BY
mp.maint_prio_type_id = 3,
mp.maint_prio_type_id DESC
LIMIT 1;
使用此查询,如果它具有类型ID 3,则优先考虑它,否则它将随机给出。想了解有关ORDER BY子句中使用的表达式的更多信息。
答案 0 :(得分:1)
关闭。这个ORDER BY
将3 最后放在中:
ORDER BY mp.maint_prio_type_id = 3, mp.maint_prio_type_id DESC
原因很简单:" true"大于"假"。如果你这样做,这很容易理解:
ORDER BY (mp.maint_prio_type_id = 3)::int, mp.maint_prio_type_id DESC
这给了" true"值" 1"并且假值为" 0"。排序顺序很明显。
如果你想要" 3"首先,然后将DESC放在第一个键旁边:
ORDER BY (mp.maint_prio_type_id = 3) DESC, mp.maint_prio_type_id DESC
这是一个奇怪的构造,但是 - 就像SQL中的许多东西一样 - 很快就会习惯它。