2011-06-05 28 views
1

所以,我會說,我有三個表如下:許多一對多在一個光標查詢,而無需重複數據

 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 = <巴,<巴茲,corge > >

與之相對:

ROW1 = < FOO,QUUX >
ROW2 = < FOO,corge >
ROW3 = <巴,巴茲>
ROW4 = <巴,corge >

然而,我狠狠地懷疑,有什麼會給我的確是這樣,所以我想我真正的問題是,什麼是最好的方式來制定一個查詢,如thi s,這樣我就可以將其傳回到我的活動中,並且可以將所有這些數據返回給活動?或者我真的需要在以後再次遍歷我的光標,以「拾取」所有額外的數據並自己對其進行重新組織。

+0

您是否找到任何解決方案? – 2015-02-09 13:06:03

回答

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; 

請適應查詢您的問題:)

您可以找到SQLite的文檔有關concat(x)concat(x,separator)here

無論如何,你也可以關注my problem on google group

+0

儘管在一般情況下這不會解決問題(因爲它會生成所有標籤的字符串),但它爲我的用途提供了服務,因爲標籤不需要包含逗號。 – ashays 2011-06-12 19:40:53

+0

不是問題的實際解決方案 – 2015-02-09 13:05:11