我有一张语言表。
我想创建一个查询,获取具有指定语言的行,但是如果它不返回任何数据 - 使用默认语言。
这可以在一个查询中完成吗?
更新:
我的表:语言 字段:
id - (主键,唯一),
lang - (文字,不是唯一的),
内容 - (文字,不是唯一的)。
我当前的查询是:
SELECT * FROM Languages WHERE (id='1') AND (lang = 'es')
如前所述,如果上述查询不会返回任何内容,我希望从默认语言中获得结果:
SELECT * FROM Languages WHERE (id='1') AND (lang = 'en')
'en'是此示例中的默认语言。
答案 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'