Mysql 使用子查询时 where 条件筛选 时灵时不灵?

2020-03-31 16:27:35 +08:00
 black11black

如题,不太清楚原因。数据库版本 mariadb 10.3

SELECT * FROM 
   (SELECT * FROM `000001_day` WHERE `securelevel` < 2) AS subtable 
   WHERE subtable.value >= '12.6';

这是一个简单的子表查询,先筛选 securelevel < 2 的,然后在筛选 value >12.6 的,工作正常,得到如下结果

    date        id      value   securelevel 
2020-03-24	9123	12.61	1
2020-03-25	9123	12.87   1
2020-03-26	9123	13.06	1
2020-03-27	9123	13.15	1
2020-03-30	9123	12.94	1

但是如果我将条件改成大于等于 12.61 (正常情况下搜索结果不变,因为包含了第一列的 value ),但是搜索结果却变成

    date        id      value   securelevel 
2020-03-25	9123	12.87   1
2020-03-26	9123	13.06	1
2020-03-27	9123	13.15	1
2020-03-30	9123	12.94	1

第一项消失了。

尝试了一些其他选项,等于运算都不太好使,大于小于倒是都工作正常。

求问各位带佬这是咋回事

2125 次点击
所在节点    MySQL
3 条回复
black11black
2020-03-31 16:31:13 +08:00
比如如果搜索

SELECT * FROM
(SELECT * FROM `000001_day` WHERE `securelevel` < 2) AS subtable
WHERE subtable.value = '12.61';

就会返回空结果,懵
q4487979711
2020-03-31 16:35:32 +08:00
12.6 的单引号去掉
black11black
2020-03-31 16:37:57 +08:00
@q4487979711 没用,但感觉应该是浮点数引起的问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/657989

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX