【发布时间】:2022-01-06 13:28:47
【问题描述】:
我正在设计一个关于产品的多语言数据库——如何原创;)
这是简化的设计:
如果我为'de'选择数据,它是否为空(NULL):
select
p.id,
p.price,
pi.name,
pi.description
from public.products p
inner join public.locales loc
on loc.lang = 'de'
left join public.products_i18n pi
on p.id = pi.id and pi.lang = loc.id
当所需的语言环境不存在时,我想使用英语:
select
p.id,
p.price,
coalesce(pi.name, pi_def.name),
coalesce(pi.description, pi_def.description)
from public.products p
inner join public.locales loc
on loc.lang = 'de'
left join public.products_i18n pi
on p.id = pi.id and pi.lang = loc.id
left join public.products_i18n pi_def
on p.id = pi_def.id and pi_def.lang = '1' -- fallback on english
但是,我收到两行:1 行包含正确的后备数据(描述应为空),1 行为空。
是 pgAdmin 的显示问题还是我的查询错误?
那里有可用的 SQL 小提琴: http://sqlfiddle.com/#!17/485be/1
【问题讨论】:
-
我在您的结果中只看到一行?请添加架构定义、示例数据和预期结果 - 请不要使用图像。 SQL Fiddle 会很棒!
-
有一个空白行。我不知道 SQL fiddle,我会在一分钟内回复您!
-
@NevilleKuyt 请查看我更新的问题:) 它似乎只返回 1 行,但是 pgAdmin 的显示是.. 那个空行很奇怪。也许这只是一个显示问题。
-
您的第二个查询运行良好您的问题是什么?
-
我的问题取决于它是否正常 pgAdmin 向我显示第二行(但为空),与第一个查询相比。是来自 pgAdmin 的无意义显示,还是由于我的查询生成了第二个空行
标签: sql database postgresql join window-functions