假设locale_info
表为给定的locale
存储了多个items
CREATE TABLE locale_info (
locale TEXT,
item_id TEXT
)
如果表中没有给定search_locale
的条目,则为给定search_locale
或默认locale
选择项目的最简洁方法是什么?
我使用以下代码:
SELECT *
FROM locale_info
WHERE locale = COALESCE(
(SELECT DISTINCT (locale) FROM locale_info WHERE locale = 'en_ZA'),
'en'
);
如果存在en_ZA
项,则返回en_ZA
项,否则返回默认的en
区域设置。
我的问题是:如何以更干净的Postgres方式重写这个相当难看的查询?
1条答案
按热度按时间jk9hmnmh1#
我能想到的一种方法是使用UNION ALL,其中第二部分仅在第一部分返回一行时才运行:
另一种选择是始终选择两个语言环境,但按“重要性”对其进行排序,并丢弃第二个:
对布尔值排序时,
false
排在true
之前,因此通过对DESCending排序,包含所需语言环境的行排在前面。在任何情况下,您都应该在
locale
列上有一个索引(或者该列是第一列的索引)