sql查询中在DB浏览器中运行的Android异常

sql查询中在DB浏览器中运行的Android异常,android,sqlite,kotlin,android-sqlite,Android,Sqlite,Kotlin,Android Sqlite,在Android上运行以下查询时 select * from EICRChecklistItems where (Sect, S_Sect, SS_Sect) in ( select Sect, S_Sect, SS_Sect from EICRCheckList where Version=2018 order by id ) order by id 我得到一个例外: android.database.sqlite.SQLiteException:near“,”:

在Android上运行以下查询时

select * 
from EICRChecklistItems 
where (Sect, S_Sect, SS_Sect) in (
  select Sect, S_Sect, SS_Sect 
  from EICRCheckList 
  where Version=2018 
  order by id
) 
order by id
我得到一个例外:

android.database.sqlite.SQLiteException:near“,”:语法错误(代码 (一)

Sect
S_Sect
SS_Sect
都定义为
integer

但在DB Browser上针对同一数据库的副本运行时,它会正确执行

任何关于可能导致这种情况的指示都将不胜感激

private var EICR_CHECK_ITEMS_TABLE = "EICRChecklistItems"
private var EICR_CHECKLIST_TABLE = "EICRCheckList"
val cursor1: Cursor = writableDatabase.rawQuery(
            "select * from $EICR_CHECK_ITEMS_TABLE where (Sect, S_Sect, SS_Sect) in (select Sect, S_Sect, SS_Sect from $EICR_CHECKLIST_TABLE where Version='2018' order by id) order by id",  null)

由于您的SQLite版本在3.15.0之前,您无法使用,因此您可以使用
EXISTS
而不是
中的操作符
编写查询:

SELECT ei.* 
FROM EICRChecklistItems ei 
WHERE EXISTS (
  SELECT 1 FROM EICRCheckList el
  WHERE el.Version = 2018
  AND el.Sect = ei.Sect AND el.S_Sect = ei.S_Sect AND el.SS_Sect = ei.SS_Sect
)
ORDER BY ei.id

请注意,您在代码中的子查询中包含的
orderby
子句实际上是无用的。

发布执行此查询的实际代码。事实上,这个查询很好。另外,你确定你在Android中使用的数据库是DB Browser使用的数据库的精确副本吗?我已经用用于执行查询的代码更新了问题,是的,数据库是精确副本,我已经使用Android studio从设备下载了数据库还有一件事要检查的是SQLite的版本。检查
选择sqlite_version()的结果您的查询使用行值:因此版本必须至少为3.15.0谢谢您的建议,您是正确的,我的设备上使用的sqlite版本3.8.6不支持行值。如果你想把这个作为一个答案,我会接受它。非常感谢你的回答,效果很好。