例如,我使用子查询(返回字符串数据)作为IN子句的一部分,子查询部分似乎不再正常工作。我在下面附上了一个使用contacts数据库的SQL查询示例(显示的直接查询仅用于说明目的):
SELECT _id FROM data WHERE display_name IN (SELECT display_name FROM contacts);
在android2.1之前,这不是一个问题。但是,在更新之后,这将返回一个空记录集,除非我单独运行子查询,将每个结果值用单引号括起来,并将这些值直接附加到in子句中。
我已经注意到在我正在处理的多个应用程序中功能的丧失,但是我应该注意到,当结果是数字而不是基于字符串时,它确实起作用。
还有其他人遇到过这个问题吗?
如果SQLite的行为确实发生了变化,您可以尝试使用 EXISTS 而不是操作员:
EXISTS
SELECT _id FROM data WHERE EXISTS (SELECT * FROM contacts WHERE contacts.display_name = data.display_name)
这消除了对 IN 接线员。
IN