V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
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 · Mar 31, 2020 · 3088 views
    This topic created in 2222 days ago, the information mentioned may be changed or developed.

    如题,不太清楚原因。数据库版本 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
       Mar 31, 2020
    比如如果搜索

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

    就会返回空结果,懵
    q4487979711
        2
    q4487979711  
       Mar 31, 2020
    12.6 的单引号去掉
    black11black
        3
    black11black  
    OP
       Mar 31, 2020
    @q4487979711 没用,但感觉应该是浮点数引起的问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   920 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 23:22 · PVG 07:22 · LAX 16:22 · JFK 19:22
    ♥ Do have faith in what you're doing.