【发布时间】:2015-01-12 07:15:00
【问题描述】:
我有一个包含产品和标签列的多对多表。如何查询“给我在其映射中只有这些标签之一的产品列表”?
Input : '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}。希望这可以解决问题。
【问题讨论】:
-
所以您希望所有产品都在您的输入标签中包含所有映射?就这么简单?
-
在我的回答中添加了解决方案