我在mysql中有以下类型的字符串属性。 每个属性都有逗号分隔值。
Attr1: A, B, C, D
Attr2: E, F, G, H
Attr3: I, J, K, L
我需要来自上述属性和值的每个独特组合。 像:
AEI
AFI
BEI
依旧......
现在,我使用嵌套的while循环来实现相同的目的。 但随着每个属性和逗号分隔值的增加,性能开始降低。
你能帮我找到更好的方法吗?
答案 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 |
....
....
....