我有一個壞預測的數據庫,其中有一個像「1,2,5,10」這樣的文本列的ID集。我需要獲得以相同方式設置的兩列的交集。 我不喜歡用PHP或其他腳本語言來做,我也不喜歡MySQL的自定義函數。 有沒有什麼辦法讓逗號分隔字符串給出的兩組相交?MySQL字符串設置並獲得交集
其實我不需要有完整的交集,我只需要知道兩組中是否有相同的數字。如果是的話,我需要有「1」,如果沒有相同的號碼,我需要有「0」。
謝謝。
我有一個壞預測的數據庫,其中有一個像「1,2,5,10」這樣的文本列的ID集。我需要獲得以相同方式設置的兩列的交集。 我不喜歡用PHP或其他腳本語言來做,我也不喜歡MySQL的自定義函數。 有沒有什麼辦法讓逗號分隔字符串給出的兩組相交?MySQL字符串設置並獲得交集
其實我不需要有完整的交集,我只需要知道兩組中是否有相同的數字。如果是的話,我需要有「1」,如果沒有相同的號碼,我需要有「0」。
謝謝。
您或許可以使用REGEXP
來做一些巧妙的替換操作。
認爲這應該這樣做(免責聲明:沒有廣泛的測試吧):
SELECT col1,
col2,
CONCAT('(', REPLACE(col2, ',', '(\\,|$)|'), '(\\,|$))') AS regex,
col1 REGEXP CONCAT('(', REPLACE(col2, ',', '(\\,|$)|'), '(\\,|$))') AS intersect
FROM tbl
見http://sqlfiddle.com/#!2/7b86f/3
爲了解釋:該功能可將col2
爲正則表達式針對col1
匹配。 (\,|$)
位可以匹配逗號或字符串的結尾。希望這有助於...
工程就像一個魅力!謝謝! – Epsiloncool
非常感謝你! – mirsch
Steve的代碼在所有情況下都不起作用。 對於e.x,當在另一個號碼中可以找到數字時它不起作用。 INSERT INTO tbl(col1,col2) VALUES('60,61,64,68,73','14,16,17,18,1'); 稍微調整它可以工作:
SELECT col1,
col2,
CONCAT('((\\,)', REPLACE(col2,',', '(\\,)|(\\,)'), '(\\,))') AS regex,
CONCAT(',',col1,',') REGEXP CONCAT('((\\,)', REPLACE(col2,',', '(\\,)|(\\,)'), '(\\,))') AS intersect
FROM tbl
可以連接多少個值?有限制嗎? – Madhivanan
@Madhivanan當然,不超過20個逗號分隔的值。 – Epsiloncool
你有錯誤的數據,但不喜歡使用典型的解決方案來解決這些問題......爲什麼不呢? – eggyal