Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将IN子句与SQLite一起使用_Java_Android_Sqlite - Fatal编程技术网

Java 将IN子句与SQLite一起使用

Java 将IN子句与SQLite一起使用,java,android,sqlite,Java,Android,Sqlite,在使用SQLite 3.7.11和Java的开发环境中,尽管阅读了以下答案: , 我发现SQLite在子句中的用法不是很直截了当 假设一个具有以下结构的简单表格测试: ---------------------------- id PRODUCT TAG (int) (text) (text) ---------------------------- 1 Cinthol Soap, Bath, Cleaning 2 Vim

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

, 我发现SQLite在子句中的用法不是很直截了当

假设一个具有以下结构的简单表格测试:

----------------------------
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函数的情况下获得预期结果的正确查询是什么? 此外,标记列最终必须与Java中的令牌数组绑定,从而动态构建查询。不过,上面列出的答案都指向这一点


提前谢谢

In子句不是这样工作的。假设每列有一个标记,就可以得到结果。您需要添加另一个表来保留标记。在这个表中,您需要pk、foreign keyid deom测试,和标记,以便每个产品都有多个任务。这是一个您可以改变的解决方案。您最好先搜索数据库notmalization。gl

最好的解决方案是数据库规范化。。。此外,所有预期值都应为空。如果不进行规范化,您可以通过标记进行搜索的唯一方法(这是一种糟糕的性能方法)是使用来自测试的SELECT PRODUCT,其中标记为“%Soap%”,您必须通过两侧的管道将其分开,才能像“%| Soap |%”一样搜索,从而防止它获得像Soap2这样的标记。@NarayanaJ,IN子句的工作方式与您的工作方式完全相反。下面是一个简短的示例SELECT*FROM test,其中产品在'Cinthol','Vim'中;应该给你前两行。这意味着:这是该列的一个值列表,请给出该列中的值至少与其中一个值匹配的所有行。。。但下一次,请先学习一些基础知识,然后再提问。。。我也不明白为什么这个问题有+2。。。它不值得upvotesOk的家伙们,他们将花一些时间理解规范化,并满怀希望地返回解决方案。不过,请看。这是一个被接受的答案,我很难理解为什么我的问题会失败。谢谢你们@中的NarayanaJ要求左侧有一个值。