我在mysql中具有以下類型的字符串屬性。 每個屬性都有逗號分隔值。mysql - 字符串列表的所有可能的組合
Attr1: A, B, C, D
Attr2: E, F, G, H
Attr3: I, J, K, L
我需要上述屬性和值的每個獨特組合。 像:
AEI
AFI
BEI
等等....
現在,我使用嵌套while循環來達到相同的。 但是,隨着每個屬性和逗號分隔值的增加,性能開始下降。
你能幫我用更好的方法來實現嗎?
我在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