› 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 · 3493 views
    This topic created in 2369 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   ·   Privacy   ·   Solana   ·   934 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:59 · PVG 02:59 · LAX 11:59 · JFK 14:59
    ♥ Do have faith in what you're doing.