gpt4 book ai didi

mysql - 如何在行之间使用 AND 运算符进行查询

转载 作者:行者123 更新时间:2023-11-29 06:30:38 25 4
gpt4 key购买 nike

我有下表,女巫是帖子和标签之间的关系数据透视表:

post_tags table

我需要获取严格包含“X”给定标签的帖子。

例如:

  • 如果我需要专门带有标签 1 和 2 的帖子,它应该返回 post_id 1 和 4。

  • 如果我需要使用标签 2 发布帖子,它应该只返回 post_id 3。

  • 如果我需要带有标签 23 的帖子,它不应该返回任何内容。

我尝试过:

SELECT * FROM `post_tags` WHERE tag_id = 1 OR tag_id = 2;

但显然它会返回带有这些tags_id的所有post_id

还有:

SELECT * FROM `post_tags` WHERE tag_id = 1 AND tag_id = 2;

它不会返回任何内容,因为它试图在列之间进行比较。

有什么解决办法吗?

最佳答案

您需要按post_id分组并检查having子句中的条件:

SELECT post_id
FROM post_tags
GROUP BY post_id
HAVING
SUM(tag_id NOT IN (1, 2)) = 0
AND
COUNT(DISTINCT tag_id) = 2

这将仅返回带有标签 1 和 2 且没有其他标签的帖子。
对于仅带有标签 2 的帖子:

SELECT post_id
FROM post_tags
GROUP BY post_id
HAVING
SUM(tag_id <> 2) = 0
AND
COUNT(DISTINCT tag_id) = 1

如果每个 post_id, tag_id 对都是唯一,那么您可以执行以下操作:

SELECT post_id
FROM post_tags
GROUP BY post_id
HAVING COUNT(tag_id IN (1, 2)) = COUNT(tag_id)

关于mysql - 如何在行之间使用 AND 运算符进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56477667/

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