编写SQL查询校验colA与colB组合对应colC值的唯一性
你写的SQL不生效的核心原因是:你把CONCAT(A,B)和C同时作为分组依据,每个分组内的CONCAT(A,B)必然唯一,count(distinct CONCAT(A,B))的结果永远是1,自然匹配不到>1的条件。
正确写法
如果只需要找出存在异常的(A,B)组合,用以下查询即可:
SELECT A, B FROM tab1 GROUP BY A, B HAVING COUNT(DISTINCT C) > 1
执行后会返回(Jill, 456)这个不符合规则的组合。
如果需要拉取所有异常的明细记录,关联原表即可:
SELECT t1.* FROM tab1 t1 JOIN ( SELECT A, B FROM tab1 GROUP BY A, B HAVING COUNT(DISTINCT C) > 1 ) abnormal_ab ON t1.A = abnormal_ab.A AND t1.B = abnormal_ab.B
补充说明
不建议用CONCAT(A,B)的方式做组合匹配,存在字符串拼接冲突的风险(比如A为Ji、B为ll123和A为Jill、B为123的拼接结果完全相同,会导致误判),直接分组两个原始字段更稳妥。
内容的提问来源于stack exchange,提问作者sp123
相关产品推荐
相关产品推荐

