SQLite 中是否有条件 where 语句?
Is there a conditional where statement in SQLite?
我有一个带有待办事项数据库的待办事项应用程序。它包含一列 done,它将被设置为 false 或 true。现在我想按 all 或 unfinished 过滤数据。所以要么 done 是无关紧要的,要么它必须是 false.
我在 TypeScript 应用程序中使用 SQLite3。目前我通过使用字符串模板来做到这一点,但我更喜欢基于 SQL 的解决方案。
db.prepare(`
select
rowid as id,
title,
description
from todo
${selectAll ? '' : 'where done = 0'}
limit ?
offset ?
`).all(limit, offset);
我的想法是使用 CASE
子句,但似乎无法解决 WHERE
子句。
有没有更好的解决方案?
selectAll
是一个TypeScript变量,根据应用的查询参数设置。
当selectAll
为false时输出
id | title | description | done
1 | Clean the kitchen | as the title says... | 1
2 | Do the shopping | potatoes, tomatoes | 0
3 | Program stuff | Todo app | 1
当selectAll
为真时输出
id | title | description | done
2 | Do the shopping | potatoes, tomatoes | 0
您可以使用布尔逻辑:
where ? = '' or done = 0
我有一个带有待办事项数据库的待办事项应用程序。它包含一列 done,它将被设置为 false 或 true。现在我想按 all 或 unfinished 过滤数据。所以要么 done 是无关紧要的,要么它必须是 false.
我在 TypeScript 应用程序中使用 SQLite3。目前我通过使用字符串模板来做到这一点,但我更喜欢基于 SQL 的解决方案。
db.prepare(`
select
rowid as id,
title,
description
from todo
${selectAll ? '' : 'where done = 0'}
limit ?
offset ?
`).all(limit, offset);
我的想法是使用 CASE
子句,但似乎无法解决 WHERE
子句。
有没有更好的解决方案?
selectAll
是一个TypeScript变量,根据应用的查询参数设置。
当selectAll
为false时输出
id | title | description | done
1 | Clean the kitchen | as the title says... | 1
2 | Do the shopping | potatoes, tomatoes | 0
3 | Program stuff | Todo app | 1
当selectAll
为真时输出
id | title | description | done
2 | Do the shopping | potatoes, tomatoes | 0
您可以使用布尔逻辑:
where ? = '' or done = 0