在实际业务中,数据库A字段保存了一份字符串,同时将A中字符串的固定内容单独另存了B字段。
测试发现bug引发B字段跟A字段字符串对应内容不匹配的情况,导致统计跟显示的钱不一样。
需要找到错误数据。即寻找B字段不包含A字段的内容
SELECT * FROM tb1 WHERE a NOT LIKE CONCAT('%', b, '%');
id | state_education_course_id | content |
---|---|---|
10000 | 20100 | {“10000”:“安防监控运维服务”,“10001”:1,“10002”:159620,“10003”:159620,“10006”:“定制”,“10007”:“承担学校四校区安防监控系统的运行和保障”,“10022”:“定制”,“stateEducationCourseId”:2010} |
10001 | 20101 | {“10000”:“安防监控运维服务”,“10001”:1,“10002”:159620,“10003”:159620,“10006”:“定制”,“10007”:“承担学校四校区安防监控系统的运行和保障”,“10022”:“定制”,“stateEducationCourseId”:20101} |
10002 | {“10000”:“安防监控运维服务”,“10001”:1,“10002”:159620,“10003”:159620,“10006”:“定制”,“10007”:“承担学校四校区安防监控系统的运行和保障”,“10022”:“定制”} |
测试数据如上表,观察发现,state_education_course_id字段,在content里面又保存了一份键值对,其中id10000的数据,state_education_course_id为20100,在content中stateEducationCourseId保存为2010,这是异常数据也是目标数据,SQL写法应该为
SELECT * FROM TABLENAME
WHERE content NOT LIKE CONCAT('%',state_education_course_id,'%')
AND content LIKE '%stateEducationCourseId%'