【发布时间】:2016-07-14 09:42:37
【问题描述】:
我有两张桌子:
语言,作为我的语言的索引。
isolanguage
"de"
"en"
"es"
"fi"
"fr"
"no"
"pl"
"ru"
还有翻译,我存储地点的翻译:
Name, translation, isolanguage
"Umeå Airport";"Flughafen Umeå";"de"
"Umeå Airport";"Umeå Airport";"en"
"Umeå Airport";"Aeropuerto de Umeå";"es"
"Umeå Airport";"Uumajan lentoasema";"fi"
我想要得到的是语言表中每种语言的翻译表中所有元素的列表。
预期结果:
"Umeå Airport";"Flughafen Umeå";"de"
"Umeå Airport";"Umeå Airport";"en"
"Umeå Airport";"Aeropuerto de Umeå";"es"
"Umeå Airport";"Uumajan lentoasema";"fi"
"Umeå Airport";NULL;"fr"
"Umeå Airport";NULL;"no"
"Umeå Airport";NULL;"pl"
"Umeå Airport";NULL;"ru"
关键是我需要所有语言,不管有没有翻译。
我正在尝试左连接查询,但不起作用,它只显示两个表中的元素(不包括 NULLS)
select * from languages a
left join translations b
on (a.isolanguage = b.isolanguage)
"Umeå Airport";"Flughafen Umeå";"de"
"Umeå Airport";"Umeå Airport";"en"
"Umeå Airport";"Aeropuerto de Umeå";"es"
"Umeå Airport";"Uumajan lentoasema";"fi"
NULL;NULL;"fr"
NULL;NULL;"no"
NULL;NULL;"pl"
NULL;NULL;"ru"
【问题讨论】:
-
您一定做错了什么或与您所描述的不同。我刚刚复制了您的设置,查询产生了您所需要的内容,包括带有
NULL的行进行翻译。 -
你是对的。但我正在寻找的是也有第一个字段的值。例如:Umeå Airport;NULL;"fr" Umeå Airport;NULL;"no。如果我没有这个字段,我会有很多空字段,所有表都带有“fr”。
-
好吧,在这种情况下,您需要规范化您的架构。将名称(第一列)提取到一个新表中并给它们一个 ID。然后您可以查询语言和这个新表的交叉产品,这将创建所有可能的条目。通过将其加入翻译表,您将获得所需的内容。
-
原来的问题有点误导。
标签: sql postgresql join left-join