一个游标中的多对多查询,无需重复数据

时间:2011-06-05 19:33:52

标签: android sqlite cursor

所以,我要说我有三张表如下:

       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 =< foo,< quux,corge>>
row2 =< bar,< baz,corge>>

相反:

row1 =< foo,quux>
row2 =< foo,corge>
row3 =< bar,baz>
row4 =< bar,corge>

然而,我严重怀疑有什么东西可以准确地给我,所以我想我真正的问题是,制定这样的查询的最佳方法是什么,以便我可以将它传递给我的活动,它能够将所有这些数据返回给活动吗?或者我真的需要再次迭代我的光标以“拾取”所有额外的数据并自己重新组织。

1 个答案:

答案 0 :(得分:2)

得到解决方案:

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;

请根据您的问题调整查询:)

您可以找到有关concat(x)concat(x,separator) here的SQLite文档。

无论如何,您也可以关注my problem on google group