mysql查询数据异常,展⽰结果不在in集合中(已解决,未到原因)
mysql版本5.6.16,已提前排除所有null值
1 正常运⾏sql
-- sql1
select distinct waybill_no
from test1 p1
where  p1.waybill_no in
(
select
*--利⽤mysql特性,求出时间最近的⼀条运单
from(
select
*
from test2
where create_time>'2000-01-01'
order by waybill_no,create_time desc
) d
group by        waybill_no
)
result1: 600000
2 数据量过多,进⾏排查
-- sql2
select
*--利⽤mysql特性,求出时间最近的⼀条运单
from(
select
*
from test2
where create_time>'2000-01-01'
order by waybill_no,create_time desc
) d
group by        waybill_no
result2: 600
3 异常现象及分析
现象:数据量膨胀100倍左右,result1的结果waybill_no不在result2中的waybill_no。
按照正常逻辑,result1和result2两个sql都有去重操作,它们数据量应该完全⼀致
4 初步猜测是in语句没有⽣效,对sql1进⾏注释如下
-- sql3
select distinct waybill_no
from test1 p1
/* where  p1.waybill_no in
(
select
* --利⽤mysql特性,求出时间最近的⼀条运单
from                (
select
*
from test2
where create_time>'2000-01-01'
mysql下载不了什么原因order by waybill_no,create_time desc                                                ) d
group by        waybill_no
)
*/
result3: 600000``
```sql
在这⾥插⼊代码⽚
结果证实确实没有起到作⽤
5 对sql1进⾏转换如下
create table yt_der_tmp
as
select
*--利⽤mysql特性,求出时间最近的⼀条运单
from(
select
*
from test2
where create_time>'2000-01-01'
order by waybill_no,create_time desc
) d
group by        waybill_no;
select distinct waybill_no
from test1 p1
where  p1.waybill_no in(select waybill_no from yt_der_tmp ); result4:600
6 初步猜测如下
mysql只⽀持2层嵌套,3层嵌套时,会出现数据异常

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。