1

我需要帮助编写查询。使用此模式作为示例:

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并按区域性 2 过滤ALocalized。如果区域性 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

提前致谢

4

1 回答 1

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
于 2013-01-30T03:47:36.740 回答