Sqlite连接表并选择列包含的位置

时间:2014-05-26 15:34:14

标签: sqlite select join where

我有3张桌子

**Posts**

id post_title
1  First_Post
2  Second_Post
3  Third_Post


**Tags**

id tag_name
1  Published
2  Favorites
3  Deleted


**PostTagRelatives** 

id post_id tag_id
1    1       1
2    1       2
3    2       3

我使用查询

SELECT p.*, GROUP_CONCAT(PostTagRel.tag_id) AS tags FROM Posts p left
join PostTagRelatives PostTagRel on PostTagRel.post_id = p.id GROUP BY
p.id

并且它工作正常。

我需要添加到sql查询以仅获取包含“已发布”和“收藏夹”标签的帖子。我尝试在GROUP BY之前插入一些条件,如

WHERE (',' || tags || ',') LIKE '%,1,2,%'

但它没有帮助。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用子选择来查找两者。我假设PK并且帖子不能多次使用相同的标签。

SELECT p.*, GROUP_CONCAT(PostTagRel.tag_id) AS tags 
FROM Posts p 
left join PostTagRelatives PostTagRel on PostTagRel.post_id = p.id 
WHERE 2 = ( SELECT COUNT(*)
            FROM PostTagRelatives PTR
            INNER JOIN Tags T ON (T.tag_id = PTR.tag_id AND PTR.post_id = p.post_id )
            WHERE T.tag_name IN ('Published','Favorites') )
GROUP BY p.id