0

最近我将我的 Nexus One 更新为 Froyo (2.2),我注意到 SQLite 的一些明显不同的行为。

例如,我一直在使用子查询(返回字符串数据)作为 IN 子句的一部分,而子查询部分似乎不再正常工作。我在下面附上了一个使用联系人数据库的示例 SQL 查询(直接查询仅用于说明目的):

SELECT _id FROM data WHERE display_name IN (SELECT display_name FROM contacts);

直到 Android 2.1 这都不是问题。然而,在更新之后,这将返回一个空记录集,除非我单独运行子查询,将每个结果值括在单引号中并将这些值直接附加到 IN 子句中。

我注意到我正在处理的多个应用程序中的这种功能损失,但我应该注意,当结果是数字而不是基于字符串时,它似乎确实有效。

有没有其他人遇到过这个问题?

4

1 回答 1

0

如果 SQLite 的行为确实发生了变化,您可以尝试使用运算符重写查询EXISTS

SELECT _id FROM data WHERE EXISTS
    (SELECT * FROM contacts WHERE contacts.display_name = data.display_name)

IN这消除了对运营商的依赖。

于 2010-09-29T05:54:02.957 回答