【发布时间】:2010-11-06 13:17:15
【问题描述】:
首先声明:我正在处理一个具有非常奇怪架构的遗留数据库。另外,我是一个完整的 SQL 菜鸟,所以这也无济于事。
基本上,我有一张包含产品变体的表格。一个很好的例子可能是 T 恤。 “通用” T 恤有一个产品 ID。每种类型的变化(大小、颜色)都有一个 id。变化的每个值(红色,小)都有一个 id。
所以表格看起来像:
+----+----------+-----------+-------------+----------+------------+
| id | tshirt | option_id | option_name | value_id | value_name |
+----+----------+-----------+-------------+----------+------------+
| 1 | Zombies! | 2 | color | 13 | red |
| 1 | Zombies! | 2 | color | 24 | black |
| 1 | Zombies! | 3 | size | 35 | small |
| 1 | Zombies! | 3 | size | 36 | medium |
| 1 | Zombies! | 3 | size | 56 | large |
| 2 | Ninja! | 2 | color | 24 | black |
| 2 | Ninja! | 3 | size | 35 | small |
+----+----------+-----------+-------------+----------+------------+
我想编写一个查询来检索给定产品的不同组合。
在此示例中,僵尸衬衫有红色/小号、红色/中号、红色/大号、黑色/小号、黑色/中号和黑色/大号(六种款式)。 Ninja 衬衫只有一种变化:黑色/小号。
我相信这是尺寸和颜色的笛卡尔积。
这些 id 确实是其他表的外键,所以为了清楚起见,这些名称/值不是但想包括在内。
选项的数量可以变化(不限于两个),每个选项的值的数量也可以变化。最终,给定产品的数字可能会很小,所以我不担心这里有数百万行。
关于我如何做到这一点的任何想法?
谢谢, p.
【问题讨论】: