gpt4 book ai didi

mysql - 通过包含和排除标签来选择项目

转载 作者:行者123 更新时间:2023-11-29 07:23:31 27 4
gpt4 key购买 nike

考虑以下架构:

id | question
-----------
1 | How old are you?
2 | Are you a male or female?

question_tag:

id | question_id | tag_id
--------------------------
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
4 | 2 | 1
5 | 2 | 2

tags:

id | tag
--------------
1 | some_tag
2 | some_other_tag
3 | different_tag

问题和标签是多对多的关系。

我想选择所有有特定标签但没有其他标签的问题。

例如具有两个标签 ID [1,2] 但没有标签 ID [3] 的问题

我目前拥有的是:

select `questions`.`id`,
`questions`.`question`,
from `questions`
inner join `question_tag` on `questions`.`id` = `question_tag`.`question_id`
where `tag_id` in (1,2)
group by `questions`.`id`, `questions`.`question`
having count(tag_id) = 2;

'include' 部分有效 - 我只得到同时具有两个标签的问题。

现在我需要添加“排除”部分 - 例如过滤我们也有 tag_id = 3 的问题。

我尝试添加 AND tag_id NOT IN (3) 但没有成功 - 这些问题没有从结果中过滤掉。

知道我错过了什么吗?

最佳答案

您可以尝试使用不存在的相关子查询

select `questions`.`id`,
`questions`.`question`,
from `questions`
inner join `question_tag` on `questions`.`id` = `question_tag`.`question_id`
where `tag_id` in (1,2) and not exists (select 1 from question_tag x where `question_tag`.`question_id`=x.`question_id` and x.tag_id=3)
group by `questions`.`id`, `questions`.`question`

关于mysql - 通过包含和排除标签来选择项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55002874/

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