设置和获取交集的 MySQL 字符串

标签 mysql sql math boolean set

我有一个错误投影的数据库,它在文本列中设置了 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/

相关文章:

mysql - 选择具有相同聚合值的所有行

mysql - 如何使用索引在两列之间进行查询过滤

algorithm - 如果 p 是素数,如何使用快速算法检查 ap + b 是否是素数?

MySQL 主键和 VARCHAR(255)

php - 如何防止在SQL中插入现有数据

mysql - 上传 mysql 文件后的 Blanco 页面

math - “LSB/Unit”和 “Unit/LSB”的含义

mysql - LOAD DATA INFILE 应使用特定内容填充空值

mysql - sql中的blob数据类型与spring中的blob数据类型相同

c# - 将无穷大数学行为添加到 Decimal