免责声明:我正在处理遗留数据库,这个数据库具有非常奇怪的模式。另外,我是一个完整的SQL noob,所以这也没有帮助。如何在单个表中获取MySQL中的笛卡尔积
基本上,我有一个表有产品变化。一个很好的例子可能是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 |
+----+----------+-----------+-------------+----------+------------+
我想写获取给定产品的不同组合查询。在这个例子中,僵尸衬衫有红/小,红/中,红/大,黑/小,黑/中,黑/大(六种不同)。忍者衬衫只有一个变化:黑/小。
我相信这是尺寸和颜色的笛卡尔产品。
这些ID实际上是其他表的外键,所以这些名称/值不是为了清晰起见而是想包括在内。
选项数量可能会有所不同(不限于两个),每个选项的值数量也可能会有所不同。最终,这些数字可能对于特定产品来说很小,所以我并不担心这里有数百万行。
关于我如何做到这一点的任何想法?
谢谢, p。
这样做的技巧,虽然它似乎只处理两个变量(在这种情况下大小/颜色)。尽管现在我需要弄清楚如何查找这些外键而不会泄露结果。谢谢! – philoye 2010-11-07 11:59:29