2

我有一个投影不好的数据库,它在“1,2,5,10”之类的文本列中有一个 ID 集。我需要得到以相同方式设置的两列的交集。我不喜欢使用 PHP 或其他脚本语言来做,我也不喜欢 MySQL 自定义函数。有没有办法得到逗号分隔符字符串给出的两组的交集?

其实我不需要有完整的交集,我只需要知道两组中是否有相同的数字。如果是,我需要有“1”,如果没有相同的数字,我需要有“0”。

谢谢你。

4

2 回答 2

3

您可以通过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. 该(\,|$)位与逗号或字符串结尾匹配。希望这可以帮助...

于 2012-09-07T13:20:03.787 回答
0

Steve 的代码并非在所有情况下都有效。例如,当一个数字可以在另一个数字中找到时,它不起作用。插入 tbl (col1, col2) 值 ('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
于 2014-02-05T19:33:38.163 回答