gpt4 book ai didi

Mysql 内连接,其中条目必须匹配多个条目

转载 作者:行者123 更新时间:2023-11-29 22:06:14 24 4
gpt4 key购买 nike

我有两张 table :

文章

ID    OTHER
1 foobar
2 more foobar

文章标签

ID    ARTICLE_ID    NAME
1 2 docs
2 2 noob
3 1 docs

在上表中,我只想检索文章 id 2,因为它被文档和 noob 引用。即使 ID 1 与 docs 匹配,也不应返回它,因为它与 noob 不匹配。

我只想检索一篇同时具有 docs 和 noobarticle_tags 的文章。我尝试过使用内部联接:

SELECT articles.* FROM articles
INNER JOIN article_tags ON article_id = articles.id
WHERE article_tags.name = 'docs' AND article_tags.name = 'noob'
GROUP BY articles.id;

我知道这不起作用,因为article_tag名称不能同时是docs和noob,但是我该如何正确执行此操作?使用 或 返回正确的文章,但它也会返回仅包含 docs 或 noob 的所有文章。

最佳答案

当您想要向查询中的每一行添加更多列(即信息)时,JOIN 会派上用场。在这种情况下,子查询将更适合:

SELECT articles.*
FROM articles
WHERE id in (
SELECT article_id
FROM article_tags
WHERE article_tags.name IN('docs','noob')
GROUP BY article_id HAVING COUNT(DISTINCT name) = 2
)

这里,子查询将返回所有同时具有 docs 和 noob` 标签的 article_id,并通过以下方式执行:

  • 仅选择 article_tags 中具有相关标签名称的行
  • article_id(我们想要的值)对过滤后的行进行分组,并仅保留存在两行或更多行的值*。

*:我刚刚注意到,如果article_tags还有另一行article_id=1和name=“docs”,那么结果中将显示文章“foobar”,这是错误的。我认为您可以使用适当的PKarticle_tags表上的唯一键来解决此问题,这将防止将另一个同名的标签添加到相同的article_id
或者,可能更好的是,将 article_tags 表分成两部分,创建一个单独的 tags 表。

关于Mysql 内连接,其中条目必须匹配多个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com