Android: беды ViewBinder и SimpleCursorAdapter SQL

Я изо всех сил пытаюсь заставить более сложные запросы работать с SimpleCursorAdapter и ViewBinder с ListView. Когда я просто возвращал все записи в моей таблице, это не было проблемой. Однако я хочу вернуть список имен исполнителей из моих таблиц в порядке имен. Большая проблема связана с полем "rowid _id", которое ожидает SimplerCursorAdapter/ViewBinder.

Мой код работал нормально, когда у меня были запросы вида SELECT rowid _id, Artist.NAME и т. Д., Но я хочу использовать ключевое слово DISTINCT, чтобы вернуть уникальный набор, если имена исполнителей. Я не могу поставить "rowid _id" перед "DISTINCT Artist.Name" и не могу поставить его после. Какое решение для этого?

Запрос, который я хочу (A): (показан без "rowid _id"):

String sQuery = String.format( "SELECT DISTINCT Artist.Name, Artist.ID FROM Artist JOIN Tune ON Artist.ID=Tune.ArtistID AND Tune.Type=%d AND Tune.SubType=%d ORDER BY Artist.Name", nType, nSubtype );

Чтобы уточнить, это работает:

Cursor c = db.rawQuery( "SELECT rowid _id, Name, Rating FROM Tune ORDER BY Name", null );

Всякий раз, когда я помещаю rowid _id обратно в запрос (A), я получаю исключения "no такие столбцы rowid":

String sQuery = String.format( "SELECT rowid _id, Artist.Name, Artist.ID FROM Artist JOIN Tune ON Artist.ID=Tune.ArtistID AND Tune.Type=%d AND Tune.SubType=%d ORDER BY Artist.Name", nType, nSubtype );

Что я делаю неправильно?

РЕДАКТИРОВАТЬ: я даже не понимаю, что делает "rowid _id" - мой SQLite Manager (инструмент тестирования) тоже не нравится, когда у меня есть запрос с объединением. Кажется, он работает только с простым запросом к одной таблице. Так что, если это так... как мне сделать этот запрос без него для SimpleCursorAdapter & ViewBinder?

1 ответ

Ответ заключался в том, чтобы забыть об использовании rowid и использовать вместо этого собственное поле Artist.ID. Это будет работать до тех пор, пока я присваиваю псевдониму поля имя _id, которое SimpleCursorAdapter ожидает в столбце 0.

String sQuery = String.format( "SELECT DISTINCT Artist.ID  _id, Artist.Name  FROM Artist JOIN Tune ON Artist.ID=Tune.ArtistID AND Tune.Type=%d AND Tune.SubType=%d ORDER BY Artist.Name", nType, nSubtype );
Другие вопросы по тегам