SQL当x = y返回没有行时,使用x = z

时间:2015-12-23 13:52:07

标签: sql sqlite

我不知道怎么说这个,所以在发布之前我不确定要google什么。

这也将通过SQLite完成。

基本上我要做的就是这样:

SELECT name FROM users WHERE Language = 'en'

如果'Language = 'en'未返回任何行,请更改'en' to 'fr'

我知道我可以通过运行第一个查询,检查结果然后再尝试第二个查询来实现这一目标,我认为可能有一种方法可以在单个查询中执行此操作,因为这样我的情况会更好。

3 个答案:

答案 0 :(得分:4)

如果您只想查找一行,请使用优先级:

select name
from users
where language in ('en', 'fr')
order by (case when language = 'en' then 1 else 2 end)
fetch first 1 row only;

如果您要查找多行,则可以使用exists子句。

答案 1 :(得分:1)

如果SQLLite中没有这种语法,请原谅我,但是如果它是这样的话应该可以这样做:

SELECT
    name
FROM
    users
WHERE
    language = 'en' OR
    (
        language = 'fr' AND
        NOT EXISTS (SELECT * FROM users WHERE language = 'en')
    )

答案 2 :(得分:0)

如果您正在寻找单行UNION ALL / LIMIT 1有一个非常简单的解决方案:

SELECT name FROM users WHERE language = 'en'
UNION ALL
SELECT name FROM users WHERE language = 'fr'
LIMIT 1;