このクエリを Sqlite データベース アプリ、つまり「Base.app」(Mac App Store にあります) で実行すると、3 つの結果行が得られます。iOS6 で以下のコードを実行すると、3 行も取得されます。ただし、iOS 5.1 では 1 行のみが返されます。エラーなし。GROUP BY と HAVING を削除すると、iOS6 と DB アプリで 1 行の結果を再現できます。しかし、なぜ iOS5 はこれらを無視するのでしょうか?
SELECT COUNT(Sub.intItemID) AS intNumSubFolders, Items.*, Files.*
FROM Items
LEFT JOIN Items AS Sub ON Sub.intParentID = Items.intItemID AND Sub.intObjectType IN (2, 3, 6)
LEFT JOIN Files ON Files.intItemID = Items.intItemID
WHERE Items.intParentID= 2905837
GROUP BY Items.intItemID HAVING Items.intItemVersion=MAX(Items.intItemVersion)
私が使用するコードは次のとおりです。
using ( SqliteCommand oCmd = new SqliteCommand ( "SELECT COUNT(Sub.intItemID) AS intNumSubFolders, Items.*, Files.*" +
" FROM Items" +
" LEFT JOIN Items AS Sub ON Sub.intParentID = Items.intItemID AND Sub.intObjectType IN (2, 3, 6)" +
" LEFT JOIN Files ON Files.intItemID = Items.intItemID " +
" WHERE Items.intParentID=@intItemID" +
" GROUP BY Items.intItemID HAVING Items.intItemVersion=MAX(Items.intItemVersion)", oConn ) )
{
oCmd.Parameters.AddWithValue ( "@intItemID", iID );
using ( var oReader = oCmd.ExecuteReader ( ) )
{
while ( oReader.Read ( ) )
{
// getting here only once
}
oReader.Close ();
}
}
誰かがなぜこれが起こるのか説明できますか? iOS5で確認済み。iOS6では期待通りに動作しています。