java - 在 SQLite 中使用 IN 子句

标签 java android sqlite

在使用 SQLite 3.7.11Java 的开发环境中,尽管阅读了以下答案:

我发现 SQLite IN 子句的用法不是很直接。

假设一个简单的表 TEST 具有以下结构:

----------------------------
id     PRODUCT       TAG
(int)  (text)        (text)
----------------------------
1      Cinthol       Soap, Bath, Cleaning
2      Vim           Dishwash, Kitchen, Cleaning
3      Burger        Food, Breakfast, Lunch, Dinner

以下查询以这种方式运行:

----------------------------------------------------------------------------
Query                                                  Result     Expected
----------------------------------------------------------------------------
SELECT PRODUCT FROM TEST WHERE TAG IN('Soap')          Cinthol    Cinthol
SELECT PRODUCT FROM TEST WHERE TAG IN('Dinner')        <EMPTY>    Burger
SELECT PRODUCT FROM TEST WHERE TAG IN('Soap', 'Bath')  <EMPTY>    Cinthol
SELECT PRODUCT FROM TEST WHERE TAG IN('Cleaning')      <EMPTY>    Cinthol, Vim

所以问题是:

  • 除了第一个查询,为什么其他查询没有产生预期的结果?是不是理解有根本性的错误?
  • 如果错误,获得预期结果的正确查询是什么(不使用 instr 函数)?

此外,TAG 列最终必须与 Java 中的标记数组绑定(bind),从而动态构建查询。不过,上面列出的答案指向了这一点。

提前致谢!

最佳答案

In 子句不像这样工作。假设如果每一列都有一个 TAG,您就可以获得结果。您需要添加另一个表来保留您的标签。在此表中,您需要 pk ,外键(id deom 测试) 和标签,这样你就可以为每个产品添加多个标签。这是一个你可以做出不同的解决方案。你最好先搜索数据库 notmalization.gl

关于java - 在 SQLite 中使用 IN 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33777847/

相关文章:

java - 改造覆盖方法失败

java - JUnit 在 play 框架 2.0.4 中测试 Akka 参与者 - scala.concurrent.duration.Duration 上的 JAVA ClassNotFoundException

android - 在 webview 中覆盖网页样式 - android

java - Spring Batch Admin,无法替换占位符 'batch.business.schema.script'

java - 哲学家就餐——我与所有人交谈,只有一个人在听

android - Honeycomb 预览 - 无法在 Eclipse 下的模拟器上安装我的应用程序

Android Rooms - 在字符串中搜索

javascript - 如何从位于另一个文件中的查询函数获取结果? (Javascript、phoneGap 和 Sqlite)

c# - 通过网络连接到 SQLite 数据库

python没有名为serial的模块