Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL当x=y不返回行时,使用x=z_Sql_Sqlite - Fatal编程技术网

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

SQL当x=y不返回行时,使用x=z,sql,sqlite,Sql,Sqlite,我不知道该怎么说,所以在发布这篇文章之前,我不知道该用谷歌搜索什么 这也将通过SQLite完成 基本上我想做的是: 从语言为'en'的用户中选择名称 如果'Language='en'不返回任何行,请将'en'更改为'fr' 我知道我可以通过运行第一个查询,检查结果,然后下一个尝试第二个查询来实现这一点,我认为可能有一种方法可以在单个查询中实现这一点,因为这在我的情况下会更好 如果只查找一行,请使用优先级: select name from users where language in ('en

我不知道该怎么说,所以在发布这篇文章之前,我不知道该用谷歌搜索什么

这也将通过SQLite完成

基本上我想做的是:

从语言为'en'的用户中选择名称

如果'Language='en'不返回任何行,请将'en'更改为'fr'


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

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

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子句。

如果SQLLite中没有此语法,请原谅,但如果是:

SELECT
    name
FROM
    users
WHERE
    language = 'en' OR
    (
        language = 'fr' AND
        NOT EXISTS (SELECT * FROM users WHERE language = 'en')
    )
如果您要查找单行,有一个非常简单的解决方案:


如果您正在寻找多行,那么窗口函数就是最佳选择。-OP没有指定数据库引擎,但SQL Server支持TOP 1,并带有可在这种情况下使用的关系。其他数据库引擎可能提供类似的功能。@hvd应该指定SQliteCool谢谢,这实际上是我刚刚实现的,减去不存在的SELECT*,从用户那里选择language='en'更好,效果更好,谢谢!
SELECT name FROM users WHERE language = 'en'
UNION ALL
SELECT name FROM users WHERE language = 'fr'
LIMIT 1;