我需要写一个查询的帮助。使用此架构作为示例:
Table: A
id 1
id 2
Table: ALocalized
A_id 1, culture 1, name 'EN translation'
A_id 1, culture 2, name 'PT translation'
A_id 2, culture 1, name 'EN translation'
这是我用来本地化信息的模式。 A 上的每条记录在 ALocalized 上至少有一条相关记录,但可能有些行没有针对某些文化的本地化记录。
在此示例中,我想查询 A 并按文化过滤 ALocalized 2.如果文化2不存在,则返回任何其他可用的文件。 结果应该是:
A_id 1, culture 2, name 'PT translation'
A_id 2, culture 1, name 'EN translation'
我尝试使用子查询加入两个表,但我认为我的问题出在 where 子句中。
where (ALocalized.culture = @cultureparameter OR ALocalized.culture = 1 OR ALocalized.culture = 2) limit 1
当@cultureparameter为2时返回文化1.它不遵守where子句的顺序
我该怎么做?我试图避免使用循环检查每个 A 记录是否存在 ALocalized 。
提前致谢
答案 0 :(得分:1)
SELECT a.*,
COALESCE(b.culture, c.culture) Culture,
COALESCE(b.Name, c.Name) Name
FROM tableA a
LEFT JOIN tableB b
ON a.id = b.a_id AND
b.culture = 2
LEFT JOIN tableB c
ON a.id = c.a_id AND
c.culture = 1