gpt4 book ai didi

mysql - 选择映射是多对多映射表中给定输入的子集的行

转载 作者:行者123 更新时间:2023-11-30 22:52:04 26 4
gpt4 key购买 nike

我有一个包含产品和标签列的多对多表。我如何查询“给我在其映射中只有一个这些标签的产品列表”?

输入:'2,3,4'(这对应于 Mappings 表中的 tagid 列)

预期输出:3、4、5(这对应于 productid 列。产品 3、4、5 的标签是“2、3、4”的子集(或真子集))。

-- Table: Product
+---------+-----------+
| productid | name |
+---------+-----------+
| 1 | HTC |
| 2 | Nokia |
| 3 | Samsung |
| 4 | Motorolla |
| 5 | Apple |
+---------+-----------+

-- Table: Mappings
+------+-----------+
| tagid| productid |
+------+-----------+
| 1 | 1 |
| 1 | 2 |
| 2 | 1 |
| 2 | 3 |
| 3 | 1 |
| 3 | 4 |
| 4 | 5 |
+------+-----------+

-- Table: Tags
+------+-------+
| tagid | name |
+------+-------+
| 1 | blue |
| 2 | black |
| 3 | pink |
| 4 | gold |
+------+-------+

编辑:

预期输出说明:输入 tagIds - {2,3,4} 。对于 tagId 2,在映射表中我们映射了 productIds { 1,3 }。tagId 3 有一个映射 { 1, 4} 而 tagId 4 有一个映射 { 5 }。所以 productIds 的组合列表是 {1,3,4,5}。
但是现在 productId 1 有一个与之关联的 tagId 1,它不在 tagIds 的输入列表中。所以最终输出应该是{3, 4 , 5}。希望这能解决问题。

最佳答案

这个有用吗?它适用于 MS-SQL。我目前没有运行 mysql 数据库实例。

select * from products
where (select count(*) from mappings
where products.productid=mappings.productid
AND mappings.tagid in (2,3,4)) = 1

如果您添加 GROUP BY 子句,@Florian 的解决方案也将起作用:

SELECT products.productid,products.productname,count(*)
FROM products
INNER JOIN mappings on products.productid = mappings.productid
AND mappings.tagid in (2,3,4)
GROUP BY products.productid,products.productname
HAVING count(*)=1

关于mysql - 选择映射是多对多映射表中给定输入的子集的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27897024/

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