Запрос «многие ко многим» в одном курсоре без повторяющихся данных - PullRequest
1 голос
/ 05 июня 2011

Итак, я хочу сказать, что у меня есть три таблицы следующим образом:

       POSTS             POSTS_TAGS           TAGS
+-----+-----------+ +---------+--------+ +-----+-------+
| _id |   title   | | post_id | tag_id | | _id | title | 
+-----+-----------+ +---------+--------+ +-----+-------+
|  0  |    foo    | |    0    |    1   | |  0  |  baz  |
+-----+-----------+ +---------+--------+ +-----+-------+
|  1  |    bar    | |    0    |    2   | |  1  | quux  |
+-----+-----------+ +---------+--------+ +-----+-------+
                    |    1    |    0   | |  2  | corge |
                    +---------+--------+ +-----+-------+
                    |    1    |    2   |
                    +---------+--------+

Можно ли сформулировать запрос с помощью SQLite, чтобы в нем можно было поместить курсор со следующими данными:

row1 = >
row2 = >

В отличие от:

row1 =
row2 =
row3 =
row4 =

Однако я сильно сомневаюсь, что есть что-то, что даст мне именно это, поэтому я предполагаю, что мой реальный вопрос в том, каков наилучший способ сформулировать запрос, такой как этот, чтобы я мог передать его обратно в свою деятельность , и он сможет вернуть все эти данные в активность? Или мне действительно нужно будет потом повторить курсор, чтобы «собрать» все лишние данные и реорганизовать их самостоятельно.

1 Ответ

2 голосов
/ 10 июня 2011

Получил решение:

SELECT posts._id, posts.title, GROUP_CONCAT(tags._id) AS tags_id, GROUP_CONCAT(tags.tag_name) AS tags_name FROM posts 
LEFT OUTER JOIN posts_tags ON posts_tags.post_id=posts.post_id
LEFT OUTER JOIN tags ON posts_tags.tag_id=tags.tag_id
GROUP BY posts._id;

Пожалуйста, адаптируйте запрос к вашей проблеме:)

Вы можете найти документацию SQLite о concat(x) и concat(x,separator) здесь .

В любом случае, вы также можете следить за моей проблемой в группе Google .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...