V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
black11black
V2EX  ›  MySQL

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

  •  
  •   black11black · 2020-03-31 16:27:35 +08:00 · 2270 次点击
    这是一个创建于 1699 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,不太清楚原因。数据库版本 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
    

    第一项消失了。

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

    求问各位带佬这是咋回事

    black11black
        1
    black11black  
    OP
       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
        2
    q4487979711  
       2020-03-31 16:35:32 +08:00
    12.6 的单引号去掉
    black11black
        3
    black11black  
    OP
       2020-03-31 16:37:57 +08:00
    @q4487979711 没用,但感觉应该是浮点数引起的问题
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1463 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 17:00 · PVG 01:00 · LAX 09:00 · JFK 12:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.