2010-09-29 83 views
0

最近我將Nexus One更新到Froyo(2.2),我注意到一些與SQLite有顯着不同的行爲。Android 2.2(Froyo)SQLite缺少一些IN子句功能?

例如,我一直使用子查詢(返回字符串數據)作爲IN子句的一部分,並且子查詢部分不再正常工作。我裝戴例子SQL查詢與下面的聯繫人數據庫工作(如圖所示,僅供參考直接查詢):

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

直到Android 2.1系統,這是沒有問題的。但是,更新後,這將返回一個空記錄集,除非我單獨運行子查詢,將每個結果值用單引號括起來,並將這些值直接附加到IN子句中。

我注意到我正在處理的多個應用程序中的功能丟失,但我應該注意到,當結果爲數字而不是基於字符串時,它似乎工作。

有沒有其他人遇到過這個問題?

回答

0

如果SQLite的行爲確實變了,你可以嘗試使用EXISTS操盤手重新編寫查詢:

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

這消除了對IN運營商的依賴。

+0

謝謝這看起來很有用!不幸的是,我將不得不改變子查詢,因爲android的合併代碼改變了display_name的生成方式。這應該是對我的其他項目,雖然:) – 2010-09-29 05:57:54