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, ''),
''
),
...