sqlite:有没有办法使SELECT子句中的条件或/合并?

sqlite:有没有办法使SELECT子句中的条件或/合并?,sql,sqlite,Sql,Sqlite,我有以下看法: CREATE VIEW FilmTableView AS SELECT (TitleSP || " / " || TitleEN) as Title, CompanyName, CoverURI, CompanyFilmRelation.CompanyId, CompanyFilmRelation.FilmId FROM Film JOIN

我有以下看法:

CREATE VIEW FilmTableView AS

    SELECT  (TitleSP || " / " || TitleEN) as Title,  
            CompanyName, 
            CoverURI,
            CompanyFilmRelation.CompanyId,
            CompanyFilmRelation.FilmId 

    FROM    Film
    JOIN    CompanyFilmRelation on CompanyFilmRelation.FilmId = Film.FilmId 
    JOIN    Company on CompanyFilmRelation.CompanyId = Company.CompanyId 

    ORDER BY Title;
但我最终可能会得到TitleSP或TitleEN为空的记录。在这种情况下,我只想包括不为null的列,而不包括“/”

有办法做到这一点吗?也就是说,遵循以下逻辑:

if(TitleSP && TitleEN)
   select (TitleSP || " / " || TitleEN) as Title
else
   select (TitleSP ? TitleSP : TitleEn) as Title

在sql中,如果一个运算符为null,那么表达式将变为null,您可以将其与coalesce函数一起使用以轻松解决此问题。类似的方法应该有效(注意:未测试):

如果您不能这样做,那么case就是最好的选择,类似这样的东西(也会处理空字符串):

使用该函数

CREATE VIEW FilmTableView AS

    SELECT  ifnull((TitleSP || " / " || TitleEN), ifnull(TitleSP, TitleEN)) as Title,  
            CompanyName, 
            CoverURI,
            CompanyFilmRelation.CompanyId,
            CompanyFilmRelation.FilmId 

    FROM    Film
    JOIN    CompanyFilmRelation on CompanyFilmRelation.FilmId = Film.FilmId 
    JOIN    Company on CompanyFilmRelation.CompanyId = Company.CompanyId 

    ORDER BY Title;

嗯,好像不起作用。我只是试了一下,说我有一部片名为p=a的电影,但没有片名,如果我问片名,我仍然会得到“a/”。有什么想法吗?问题是COALESCE总是返回TitleSP | |“/”| | TitleEN,因为这是第一个非空参数,不管TitleEN还是TitleSP,因为“/”@SaldaVonSchwartz=那么,如果方程的一个操作数为空,SQLite不会减少为空,COALESCE返回第一个非空参数。它就是这样做的。例如,COALESCE(“/”| | null,“a”)仍然会返回“/”,因为与null连接的“/”是“/”,而“/”不是null,并且是函数的第一个参数:s@SaldaVonSchwartz-这与其他所有SQL不同--所有其他SQL都为
null | |“/”
返回null。这些文档只讨论了
+
,然而,连接的方式应该是类似的。我猜你有另一个输入错误,或者列不是空的,它是空字符串。非常感谢。工作!我只是不知道您可以在查询中执行switch/case类型的控制流。谢谢
  TitleSP || 
  CASE WHEN ((ISNULL(TRIM(TitleSP),"") = "") OR (ISNULL(TRIM(TitleEN),"") = "")) THEN "" ELSE " / " END || 
  TitleEN as Title
SELECT CASE WHEN (TitleSP = '' OR TitleSP IS NULL)
                THEN COALESCE(TitleEN, '')
            WHEN (TitleEN = '' OR TitleEN IS NULL)
                THEN TitleSP
            ELSE (TitleSP || ' / ' || TitleEN)
       END AS Title, 
...
CREATE VIEW FilmTableView AS

    SELECT  ifnull((TitleSP || " / " || TitleEN), ifnull(TitleSP, TitleEN)) as Title,  
            CompanyName, 
            CoverURI,
            CompanyFilmRelation.CompanyId,
            CompanyFilmRelation.FilmId 

    FROM    Film
    JOIN    CompanyFilmRelation on CompanyFilmRelation.FilmId = Film.FilmId 
    JOIN    Company on CompanyFilmRelation.CompanyId = Company.CompanyId 

    ORDER BY Title;
SELECT COALESCE(
                NULLIF(TitleSP, '') || ' / ' || NULLIF(TitleEN, ''), 
                NULLIF(TitleSP, ''), 
                NULLIF(TitleEN, ''), 
                ''
               ), 
...