mysql - Mysql“near”仅与模式重复
问题描述
我想要一个 MySQL 查询:
显示“近”重复行:参考和相同参考+模式“-??” (“-”和 2 个字符而已,“?”是一个随机字符)。
带有 id,reference 的表的示例:
id reference
1 DGGDL
2 DGGDL
3 HSDKH
4 HSDKH-45
5 2KXQF
6 2KXQF
7 2J6SF
8 2J6SF-442
9 FSM
10 148-54
11 148-54
12 148
13 BWZM-67
我想在这张桌子上提出一个确切的结果:
id reference
3 HSDKH
4 HSDKH-45
10 148-54
12 148
2J6SF-442 不在这里,因为模式只是“-”+ 2 个字符(442 是 3 个字符,所以它与模式不匹配)。HSDKH 和 HSDKH-45 在结果中,因为 HSDKH-45 匹配“HSDKH-??” 并且 HSDKH 存在,BWZM-67 不在结果中,因为它匹配“BWZM-??” 但表中没有参考“BWZM”。与模式不匹配的所有其他“重复项”都从结果中排除(如 DGGDL,因为表中没有像 DGGDL-?? 这样的引用)。
我的表名是products,简化的结构是:
id,reference
我尝试了许多不同的请求但没有成功……这就是为什么我不会发布无用的请求。我不知道我是否很清楚,但这个例子正是我想要的。谢谢 !
解决方案
我想你想要:
select t.col
from t
where exists (select 1
from t t2
where t2.col like concat(t.col, '%-__') or
t1.col like concat(t2.col, '%-__')
);
如果这两个字符是特定的数字:
where t2.col regexp concat(t.col, '-[0-9]{2}$') or
t1.col regexp concat(t2.col, '-[0-9]{2}$')
或者,如果您希望每组的结果显示在一行中:
select group_concat(t.col)
from t
group by substring_index(t.col, '-', 1)
having sum(t.col like '%-__') > 0 and
sum(t.col not like '%-__') > 0;
推荐阅读
- ios - 如何将 MKMapItem 转换为二进制数据以存储在 Core Data 中?
- mysql - 预计增长率的价值
- json - 反序列化 Json 数组字典对
- function - 在 Powershell 中创建弹出消息
- android - 在android studio中,全屏活动和空活动有什么区别?
- modelica - 我是否在 OpenModelica 上正确合并了这个嵌套函数?
- php - 在php的输入标签值中显示数据库中的值
- jquery - HTML 无法理解页面上定义的 JSON 对象
- python - 由于'tornado.web'没有属性'异步',如何修复jupyter笔记本上的“500:内部服务器错误”?
- sequelize.js - Sequelize,关系和所需属性