2014-02-21 2 views
0

У меня есть две таблицы в моей SQLite базе одного таблица все (main), другой является «Избранное» таблица (favorites), и я хочу, чтобы загрузить Cursor для моего ListView и иметь звезду greyed или желтый, если его в favorites. Обе таблицы имеют одинаковые столбцы, и я надеялся загрузить Cursor с этими столбцами и дополнительный столбец favorite, который может быть логическим или 1 или 0. Любимая строка просто копируется из таблицы main, поэтому ее содержимое будет тоже самое. Затем, когда звезда нажата, обновите таблицу favorites и вызовите notifyDataSetChanged() на моем адаптере, и это должно обновить ListView.SQLite две таблицы соответствия логики

Я пробовал использовать JOIN и загружать таблицы с помощью псевдонимов AS, но у меня проблемы. Может ли кто-нибудь помочь мне с SQLite-запросом для этого? Спасибо!

ответ

0

Использование LEFT JOIN Я смог добиться того, чего хочу, и добавил столбец is_fav в таблице favorites.

SELECT M.*, F.is_fav 
FROM main AS M 
LEFT JOIN favorites AS F ON M.title = F.title 

Может показаться странным добавить эту колонку, но ее использовать в другом месте.

0

Вы можете использовать отборное как этот

SELECT M.FieldA, M.FieldB,... M.Fieldx, 
FROM MainTable AS M JOIN Favorites as F 
ON M.Id = F.Id; 

В этом примере Id является поле соответствия. Кроме того, вы можете заменить M.FiledX isnull (M.Fieldx, «что-то») или любую другую функцию. Но, по сути, если M.Fieldx возвращает null, то это не в избранное.

Также стоит сказать, что в таблице избранных вам не нужно дублировать строку, просто сохраните идентификатор записи в основной таблице.

+0

Благодарим вас за решение, но оно не работает для меня. Он возвращал только общие элементы, где я хотел иметь общие элементы, новый столбец с истинным и ложным для не общего. Однако вы указали мне в правильном направлении с ISNULL. Я использовал это с UNION ALL и двумя вызовами SELECT, чтобы получить то, что я хочу. Благодаря! – chis54

+0

О, и я дублировал всю строку, потому что эта таблица также используется в других случаях. – chis54

+0

@ chis54 Собственно, теперь я понимаю, что вы совершенно правы в вопросе, возвращающем только общие строки. Чтобы вернуть все элементы (не только общие), вам нужно выполнить «внешнее соединение» (это может быть правое соединение или левое соединение). – Merlevede

Смежные вопросы