Mysql 构造包含映射表的查询?

Mysql 构造包含映射表的查询?,mysql,sql,Mysql,Sql,我正在构建一个非常简单的cms。其中的两个对象是项目和标记 以下是我目前拥有的db模式: 使用这个我可以得到一个列表的文章标签选择。。。其中web_tag.Name='News' 问题 如何获取不包含标签的文章列表。 我试过了 SELECT ... WHERE web_tag.Name != 'News' 如果文章只有一个标签,则此项工作正常。如果文章有多个标签,它将不起作用 非常感谢 一种方法 SELECT a.id_article, a.name FROM web_article a

我正在构建一个非常简单的cms。其中的两个对象是项目和标记 以下是我目前拥有的db模式:

使用这个我可以得到一个列表的文章标签选择。。。其中web_tag.Name='News'

问题 如何获取不包含标签的文章列表。 我试过了

SELECT ... WHERE web_tag.Name != 'News'
如果文章只有一个标签,则此项工作正常。如果文章有多个标签,它将不起作用

非常感谢

一种方法

SELECT a.id_article, a.name
  FROM web_article a
 WHERE NOT EXISTS
(
  SELECT *
    FROM web_tag_to_article ta JOIN web_tag t
      ON ta.id_tag = t.id_tag
   WHERE id_article = a.id_article
     AND t.name = 'News'
)

这里是另一种演示方式

从ID\u文章所在的web\u文章中选择ID\u文章、名称、Slug 从web\u文章中选择ID\u文章,除了 选择ID_文章从web_标签到ID_标签所在的文章
从name='news'所在的web标签中选择ID标签

hmm。。。这似乎效率很低。但是,哦,好吧,工作!谢谢。@vidhu不客气:请参阅更新的答案以获取替代方案。我喜欢最后一个示例。非常感谢。
SELECT id_article, name
  FROM web_article
 WHERE id_article NOT IN
(
  SELECT id_article
    FROM web_tag_to_article ta JOIN web_tag t
      ON ta.id_tag = t.id_tag
   GROUP BY id_article
  HAVING MAX(t.name = 'News') = 1
)
SELECT a.id_article, a.name
  FROM web_article a LEFT JOIN web_tag_to_article ta 
    ON a.id_article = ta.id_article LEFT JOIN web_tag t
    ON ta.id_tag = t.id_tag
 GROUP BY a.id_article, a.name
HAVING MAX(COALESCE(t.name,'') = 'News') = 0