我有一个错误投影的数据库,它在文本列中设置了 ID,例如“1,2,5,10”。我需要获得以相同方式设置的两列的交集。 我不喜欢使用 PHP 或其他脚本语言来完成它,我也不喜欢 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
进行匹配。 (\,|$)
位与逗号或字符串末尾匹配。希望这有帮助...
关于设置和获取交集的 MySQL 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12317042/