我需要创建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
感谢您的帮助。
答案 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,所以它永远不会发生。换句话说,您要求在列上找到同时共存的内容。
因此,您可能需要OR
或IN(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 - 是您过滤文章的标签数量
答案 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