从关联表中获取

时间:2014-03-28 12:30:04

标签: mysql sql

我需要创建SQL查询,它可以检索已经给出标签的文章。关系是M:N,因此一篇文章可以关联N个标签。

id_article        id_tag             article_has_tag
1                 1, SQL             1, 1
2                 2, HTML            1, 4
3                 3, PHP             2, 1
                  4, JAVA            2, 2
                                     3, 4
                                     3, 1 

例如,如果选择SQL AND Java,则结果应为id_article: 1 3 。不是(1,2,3)

SELECT * FROM article_has_tag a 
where a.id_tag = 1 and a.id_tag = 4
-- returns zero rows

SQL Fiddle

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

SELECT * 
FROM article_has_tag a 
where a.id_tag = 1 OR a.id_tag = 4
group by id_article
having count(*)=2

答案 1 :(得分:0)

SELECT * FROM article_has_tag a 
where a.id_tag = 1 and a.id_tag = 4

返回0行,表示您正在使用AND

where a.id_tag = 1 and a.id_tag = 4

所以看起来它的id_tag是1和它的4,所以它永远不会发生。换句话说,您要求在列上找到同时共存的内容。

因此,您可能需要ORIN(1,4)

答案 2 :(得分:0)

SELECT  id_article FROM article_has_tag a 
where a.id_tag IN (1, 10)
group by id_article
having count(*)=2

其中2 - 是您过滤文章的标签数量

SQL Fiddle

答案 3 :(得分:-1)

尝试OR条件

SELECT * FROM article_has_tag a 
where a.id_tag = 1 or a.id_tag = 4
group by id_article
having count(id_article)=2
相关问题