mysql - 字符串列表的所有可能组合

时间:2017-06-01 10:47:21

标签: mysql sql

我在mysql中有以下类型的字符串属性。 每个属性都有逗号分隔值。

Attr1: A, B, C, D
Attr2: E, F, G, H
Attr3: I, J, K, L

我需要来自上述属性和值的每个独特组合。 像:

AEI
AFI
BEI

依旧......

现在,我使用嵌套的while循环来实现相同的目的。 但随着每个属性和逗号分隔值的增加,性能开始降低。

你能帮我找到更好的方法吗?

1 个答案:

答案 0 :(得分:1)

  

你能帮我找到更好的方法吗?

如果规范化表格,则可以使用交叉连接生成组合列表。 它会解决你的问题,但它不会很好地扩展。

<强>查询

SELECT 
  CONCAT(Attr1.value, Attr2.value, Attr3.value)
FROM 
 Attr1
CROSS JOIN
 Attr2
CROSS JOIN 
 Attr3
ORDER BY 
 Attr1.value ASC

<强>结果

| CONCAT(Attr1.value, Attr2.value, Attr3.value) |
|-----------------------------------------------|
|                                           AEI |
|                                           AEK |
|                                           AHI |
|                                           AHK |
|                                           AGJ |
|                                           AGL |
|                                           AFI |
|                                           AFK |
|                                           AEJ |
|                                           AEL |
|                                           AHJ |
|                                           AHL |
|                                           AGI |
....
.... 
....

参见演示http://www.sqlfiddle.com/#!9/285e41/4