开发者社区> 问答> 正文

[@徐雷frank][¥20]如下sql为当前我们的业务库中的一个去重的逻辑

如下sql为当前我们的业务库中的一个去重的逻辑。

select * from test_user where (user_id,area_id) in (

select user_id,area_id from test_user where user_id is not null group by user_id,area_id HAVING count(*) > 1

) and id not in (

select SUBSTRING_INDEX(GROUP_CONCAT(id order by a_id desc),',',1) from test_user where user_id is not null group by user_id,area_id HAVING count(*) > 1

)

但是使用该查询发现子查询中的记录并没有被排除掉,也就是NOT IN没有生效,但是我们用到该子查询去查询的时候也的确是有数据的。并且ID列为主键不存在为NULL的情况

展开
收起
晓生寒 2018-12-12 20:57:52 2049 0
1 条回答
写回答
取消 提交回答
  • 1.阿里云大学讲师,主讲《微服务Spring Cloud设计与开发实战》《MongoDB高级实战》等课程 2.MongoDB中文社区专家 3.《MongoDB实战》第2版译者 5.吉林大学计算机科学学士、上海交通大学硕士

    用执行计划分析一下,SQL语句的执行,索引和数据过滤、表扫描情况,看看是NOT IN有没有生效。
    如果没有生效是否是前面的条件已经过滤掉了后面的,优化器没有使用后面的条件限制。

    2019-07-17 23:20:18
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server 2017 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载