Sqlite - 条件SELECT?

时间:2011-11-15 15:55:12

标签: android sql sqlite

我有一张语言表。

我想创建一个查询,获取具有指定语言的行,但是如果它不返回任何数据 - 使用默认语言。

这可以在一个查询中完成吗?

更新:

我的表:语言 字段:

id - (主键,唯一),

lang - (文字,不是唯一的),

内容 - (文字,不是唯一的)。

我当前的查询是:

SELECT * FROM Languages WHERE (id='1') AND (lang = 'es') 

如前所述,如果上述查询不会返回任何内容,我希望从默认语言中获得结果:

SELECT * FROM Languages WHERE (id='1') AND (lang = 'en') 

'en'是此示例中的默认语言。

4 个答案:

答案 0 :(得分:4)

这样的事情:

(SELECT CASE
    WHEN ((SELECT ID FROM table WHERE language = specified language) IS NULL)
    THEN
      default language
    ELSE
      specified language
    END);

它将根据子查询的结果返回所需的语言。将其插入最终查询的WHERE子句中。

答案 1 :(得分:2)

SELECT *
FROM lang_tbl
WHERE lang_tbl.name = "search_lang" OR lang_tbl.name = "default_lang"
ORDER BY lang_tbl.name = "search_lang" DESC
LIMIT 1;

答案 2 :(得分:1)

从yko的答案中抄袭逻辑,这分离出确定使用哪种语言,然后返回该语言的所有行:

 SELECT * FROM languages WHERE id = '1' AND lang IN
   (SELECT lang FROM languages WHERE id = '1' AND lang IN ('es', 'en')
    ORDER BY lang = 'es' LIMIT 1)

答案 3 :(得分:0)

根据您的主键约束,两个行都不会具有相同的id值(在您的示例中为1),因此传递WHERE id='1'可能是您的问题。如果没有两行具有相同的lang值,则可以完全省略id子句,例如:

SELECT * FROM Languages WHERE lang='en'