一列中的两个外键。怎么分裂?

时间:2012-05-21 02:02:49

标签: mysql

我有以下情况。

组合表:
Combination ID | Option ID's

选项表:
Option ID | Option Name | Option Value

当引用与组合相关联的两个选项时,组合表中的“选项ID”列读取类似于“2345,3421”(在一列中)。

是否可以生成列出每种组合的所有可能组合和值的列表?
即。 combination1 | option1 | name:size | value:Small | option2 | name:color | value:Blue

1 个答案:

答案 0 :(得分:1)

您可以尝试这样的查询 -

SELECT
  c.Combination_ID, GROUP_CONCAT(CONCAT(o.Option_Name, '=', o.Option_Value))
FROM
  combinations c
LEFT JOIN options o
  ON find_in_set(o.Option_ID, c.Option_IDs)
GROUP BY
  c.Combination_ID

同意Ian McLaird关于表格规范化的内容。


SELECT
  c.Combination_ID,
  GROUP_CONCAT(o.Option_Name),
  GROUP_CONCAT(o.Option_Value)
FROM
  combinations c
LEFT JOIN options o
  ON find_in_set(o.Option_ID, c.Option_IDs)
GROUP BY
  c.Combination_ID