我可以在 SQLite 查询中指定一个列有任何值吗?
Can I specify in a SQLite query that a column have ANY value?
我正在尝试设计一项功能,用户可以在其中指定他们从查询中获取的数据。以下是最终用户的搜索选项。
- 有合同的球员(非空contractId)
- 没有合同的球员(null contractId)
- 所有玩家(null 或非 null contractId)
我想创建一个函数,它可以接受一个字符串并将其插入到 return 所需数据集的查询中。
public ArrayList<Player> getPlayers(String contractFilter) {
String query = "... WHERE player.ContractId is " + contractFilter;
}
这样设计,我可以传入contractFilter = "null"
或者contractFilter = "not null"
。 我可以为第三个条件(空或非空)传递一些东西吗?像 contractFilter = "any"
?
恕我直言,最好的解决方案就是不在 WHERE
子句中包含该列。如果您使用 like SQLiteQueryBuilder
,则在条件为 "any".
时跳过 appendWhere()
调用
你可以尝试绕过这个:
- 使用
column_name IS NULL OR column_name IS NOT NULL
- 使用
column_name LIKE '%'
但是,它们的性能很可能会更差。理想情况下,SQLite 的查询规划器将检测 "any" 情况并对其进行优化,但我不认为是这种情况。
我正在尝试设计一项功能,用户可以在其中指定他们从查询中获取的数据。以下是最终用户的搜索选项。
- 有合同的球员(非空contractId)
- 没有合同的球员(null contractId)
- 所有玩家(null 或非 null contractId)
我想创建一个函数,它可以接受一个字符串并将其插入到 return 所需数据集的查询中。
public ArrayList<Player> getPlayers(String contractFilter) {
String query = "... WHERE player.ContractId is " + contractFilter;
}
这样设计,我可以传入contractFilter = "null"
或者contractFilter = "not null"
。 我可以为第三个条件(空或非空)传递一些东西吗?像 contractFilter = "any"
?
恕我直言,最好的解决方案就是不在 WHERE
子句中包含该列。如果您使用 like SQLiteQueryBuilder
,则在条件为 "any".
appendWhere()
调用
你可以尝试绕过这个:
- 使用
column_name IS NULL OR column_name IS NOT NULL
- 使用
column_name LIKE '%'
但是,它们的性能很可能会更差。理想情况下,SQLite 的查询规划器将检测 "any" 情况并对其进行优化,但我不认为是这种情况。