SQL - where子句只匹配一个条件

时间:2013-01-30 03:35:43

标签: mysql sql select

我需要写一个查询的帮助。使用此架构作为示例:

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

提前致谢

1 个答案:

答案 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