SQL 删除 NOT IN 不起作用的地方
SQL delete where NOT IN doesn't work
我正在使用来自 Android 组件的 room dao。
我需要的是:插入列表,但之前 - 从数据库中删除所有 ID 与新列表中的 ID 不同的数据。
这是我的简单数据class:
class Data{
String id; //unique for each data class
//some other data parameters here
}
完成我的任务的最佳选择是使用 DELETE WHERE NOT IN someArray
。这是我的代码中的示例:
@Query("DELETE " +
"FROM MY_TABLE " +
"WHERE data_id NOT IN ( :listOfId )")
abstract protected fun deleteUniqueData(listOfId:String):Int
因此,当我收到必须保存的新列表时,我创建了下一个带有 ID 的字符串:"'0','1'"
并调用方法 deleteUniqueData
。
但是每次我调用这个,我都会收到 2
作为结果,这意味着有 2 行被删除了。
有趣的部分:当我替换
"WHERE data_id NOT IN ( :listOfId )")
和
"WHERE data_id NOT IN ('0','1')") //same data but hardcoded
我收到 0
作为结果。所以看起来 Room.
有问题
知道为什么 NOT IN 不起作用吗?或者如何解决?
更新
这是生成的查询:
"DELETE FROM MY_TABLE WHERE data_id NOT IN ( ? )"
更改deleteUniqueData()
以将ID列表或数组作为参数。不要自己 assemble 逗号分隔列表。 Room 做到了。
我正在使用来自 Android 组件的 room dao。 我需要的是:插入列表,但之前 - 从数据库中删除所有 ID 与新列表中的 ID 不同的数据。
这是我的简单数据class:
class Data{
String id; //unique for each data class
//some other data parameters here
}
完成我的任务的最佳选择是使用 DELETE WHERE NOT IN someArray
。这是我的代码中的示例:
@Query("DELETE " +
"FROM MY_TABLE " +
"WHERE data_id NOT IN ( :listOfId )")
abstract protected fun deleteUniqueData(listOfId:String):Int
因此,当我收到必须保存的新列表时,我创建了下一个带有 ID 的字符串:"'0','1'"
并调用方法 deleteUniqueData
。
但是每次我调用这个,我都会收到 2
作为结果,这意味着有 2 行被删除了。
有趣的部分:当我替换
"WHERE data_id NOT IN ( :listOfId )")
和
"WHERE data_id NOT IN ('0','1')") //same data but hardcoded
我收到 0
作为结果。所以看起来 Room.
知道为什么 NOT IN 不起作用吗?或者如何解决?
更新
这是生成的查询:
"DELETE FROM MY_TABLE WHERE data_id NOT IN ( ? )"
更改deleteUniqueData()
以将ID列表或数组作为参数。不要自己 assemble 逗号分隔列表。 Room 做到了。