gpt4 book ai didi

mysql - 在多对多关系中选择同一字段的多个不同值

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

我不确定标题是否真的有用,所以这是我的问题,这里有三个表:

猫:

+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+

标签:

+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+

猫标签:

+--------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| id_cat | int(11) | NO | | NULL | |
| id_tag | int(11) | NO | | NULL | |
+--------+---------+------+-----+---------+----------------+

让我们假设表格中有 10 只猫和 5 个标签(id 1 到 5),并且这些猫每只都有一些随机标签。

我如何选择具有完整标签列表的所有猫?

例如,我如何列出带有标签 2 和 3(可能是 1,2 和 3,或 2,3 和 4)的猫,而不是只有 2 或 3 或没有这两个标签的猫?

我不确定它是标准的 sql,我想用 mysql 来做。

编辑:

我试过了:

select
c.id, c.name
from
cats c
inner join cats_tags r on c.id = r.id_cat
where
r.id_tag in (:tags)
group by c.id

unitl 我记得 in 会接受任何至少具有我要求的 :tags 列表的猫。我只想要拥有我给的所有标签的猫。

最佳答案

您可以这样处理问题:

SELECT cat_id
FROM (
SELECT DISTINCT cat_id, tag_id
FROM cat_tags
WHERE tag_id IN (2,3)
) tag23
GROUP BY cat_id
HAVING COUNT(*) = 2

内联 View 是必需的,因为您所显示的任何内容都不能阻止相同的(猫、标签)配对在 cat_tags 中多次出现;如果可以假设(由于数据库约束)不会发生这种重复,则可以更简单地表达查询。

如果需要获取猫的名字,可以在结果中加入cat

关于mysql - 在多对多关系中选择同一字段的多个不同值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29349730/

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