如果给定条件不评估为True,则查询Where子句中的回退

时间:2012-09-19 15:51:25

标签: mysql select duplicates

想象一下以下场景:我有一个存储在表中的标签列表和一个存储在另一个表中的语言列表。我有用户当前的语言(例如阿拉伯语),我想查询其表中的所有标签,条件如下: 如果它们以阿拉伯语存在,请获取阿拉伯语版本。如果Label不存在阿拉伯语后备英语版本并获得英文版本。

问题是它可能同时存在阿拉伯语和英语,我不想同时选择这两行(所以简单地使用WHERE label_language='arabic' OR label_language='english'将不起作用)如果可能的话,我想在一个查询。

标签表:

id (non unique)|label_name|label_language
1|Something|arabic
1|Something Else|english
3|Blabla|english
4|Some text|english
4|Some other text|arabic

1 个答案:

答案 0 :(得分:2)

SELECT l1.id, COALESCE(l2.label_name, l1.label_name) AS label_name
    FROM Labels l1
        LEFT JOIN Labels l2
            ON l1.id = l2.id
                AND l2.label_language = 'arabic'
                AND l2.label_name <> ''
    WHERE l1.label_language = 'english'