mysql - 字符串列表的所有可能的组合
我在mysql中具有以下类型的字符串属性。 每个属性都有逗号分隔值。mysql - 字符串列表的所有可能的组合
Attr1: A, B, C, D
Attr2: E, F, G, H
Attr3: I, J, K, L
我需要上述属性和值的每个独特组合。 像:
AEI
AFI
BEI
等等....
现在,我使用嵌套while循环来达到相同的。 但是,随着每个属性和逗号分隔值的增加,性能开始下降。
你能帮我用更好的方法来实现吗?
你能帮我用更好的方法来实现吗?
如果您对表格进行规范化,则可以使用交叉连接来生成组合列表。它会解决你的问题,但它不会很好地扩展。
查询
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 |
....
....
....
非常感谢您的解决方案。 :)我会尝试使用相同的,看看它在性能上有什么不同。 –
@VanitaArora。 。 。如果您有逗号分隔的值,那么此解决方案不起作用。 –
@GordonLinoff我将在临时表中分隔逗号分隔值,然后在所有表上执行外连接。我仍然不确定表现,但我认为它会比我使用的基本while循环更好。谢谢你的时间 :) –
让我们知道你已经试过没 –
@Ankit我尝试正常嵌套while循环。首先分割第一个属性,而不是分割第二个属性的另一个while循环。然后在它内部第三个分割第三个属性的循环等等。 –
你的循环中是否有mysql查询?你能分享一个嵌套while循环的例子吗? – Sevle