新集群sda的数据比老集群的数据多2条,怎样在1千多万条数据中找到这两条不一致的数据
分段对比条数(10000为步长,步长自己来定)
在新集群上运行:
select floor(id/10000) id, count(*),max(id),min(id) FROM xxx.table group by floor(id/10000) order by id asc
在老集群上运行:
select floor(id/10000) id, count(*),max(id),min(id) FROM xxxx.table group by floor(id/10000) order by id asc
两边结果进行对比,锁定不一致的数据在哪个范围内,然后在具体查明细
![](https://img2018.cnblogs.com/blog/1579289/201903/1579289-20190317230025829-852066069.png)
为什么上面sql中order by 子句中用别名就可以?
1)where/group by/having子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自子查询之中,如:select .... from (select col1 ccc from table) where ccc > 1
2)而order by 则可以直接使用别名,如select col1 ccc from table order by ccc
这和sql 的执行顺序是有关的,where中的部分先执行 -> 如果有group by,接着执行group by -> select中的函数计算、别名指定再运行-> 最后order by
因此,字段、表达式的别名在where子句和group by子句都是不能使用的,而在order by中不仅可以使用别名,甚至可以直接使用栏位的下标来进行排序,如:order by 1 desc,2 asc