一个MySQL的执行机制问题:使用limit 1出现多个查询结果

  背景:在一条子查询语句中使用limit 1之后,完整的SQL执行完毕之后出现了多条数据
  完整SQL如下:

select c.id, h.coefficient as lambda2, d.x3, d.writetime
from coolingwall c, distance d, heatconductivity h
where 
c.id = 1 
and
h.coefficient = (select coefficient from heatconductivity where h.id = c.conductivityid)
and
d.x3 = (select x3 from distance where d.coolingwallid = c.id order by writetime desc limit 1)
order by writetime /*desc limit 1*/
-----------------------------------------------------------
id	labmda2	x3	writetime
1	14		4.6	2020-08-24 10:18:08
1	14		4.6	2020-08-24 10:17:19

  隐去了其他无用的的参数,从该SQL中可以看到:c.id h.coefficient d.x3都是唯一固定的值,(当然了,如果d.x3 h.coefficient不是查出来唯一值,那么语句实际上是无法执行成功的,会报一个“子查询结果不唯一”的错误警告)。
  在这条语句执行完毕之后,查询结果中出现了两个值。这就纳闷了,明明上述的查询参数都是唯一的,为什么会出现多个查询结果。我对子查询语句进行了回溯,在执行下面的SQL时发现,可以得到两个结果

select x3, writetime from distance where coolingwallid=1 order by writetime desc
---------------------------------------------------------
x3	writetime
4.6	2020-08-24 10:18:08
4.6	2020-08-24 10:17:19

  也就是说第一条SQL中的d.writetime在MySQL执行的过程中,是执行过一次类似select d.writetime from d where d.x3 = d.x3这样的操作的。虽然c.id h.coefficient d.x3都是被限制的唯一值,但是writetime并不是唯一值,并不会因为在子查询中利用了limit 1,就同时把writetime的值限定为"2020-08-24 10:18:08",而是会执行一条类似select d.writetime from d where d.x3 = 4.6的语句,同时得到"2020-08-24 10:17:19"和"2020-08-24 10:18:08"两个值。因此,最终的结果会出现多条数据

  至于背后MySQL的语句具体是怎么执行的,水平有限,不清楚应当怎么去查询相关的资料。仅在此做以记录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值