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
Perterually
V2EX  ›  MySQL

MySQL 发现一个问题,我无法理解

  •  
  •   Perterually · 2019-06-21 17:42:30 +08:00 · 3953 次点击
    这是一个创建于 2010 天前的主题,其中的信息可能已经有所发展或是发生改变。
    drop table if exists tmp_a;
    CREATE TABLE `tmp_a` (
      `date_a` date DEFAULT NULL,
      `id` int(11) DEFAULT NULL,
      UNIQUE KEY `id_idx` (`id`,`date_a`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    drop table if exists tmp_b;
    CREATE TABLE `tmp_b` (
      `date_b` date DEFAULT NULL,
      `id` int(11) DEFAULT NULL,
      UNIQUE KEY `id_idx` (`id`,`date_b`) USING BTREE
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    
    
    truncate TABLE grab.tmp_a;
    
    truncate TABLE grab.tmp_b;
    
    insert into grab.tmp_a(id,date_a)values(1,'2019-01-01'),(1,'2019-01-02');
    insert into grab.tmp_b(id,date_b)values(1,'2019-01-01'),(1,'2019-01-02');
    

    我运行

    SELECT
    	*
    from 
    	grab.tmp_a as a 
    inner  join 
    	grab.tmp_b as b 
    on 
    	a.id = b.id 
    WHERE    
    	a.date_a > b.date_b;
    

    结果会有一条数据出来

    Screenshot_2019-06-21_17-40-25.png

    10 条回复    2019-06-21 18:21:07 +08:00
    lazy0327
        1
    lazy0327  
       2019-06-21 17:54:00 +08:00
    你确定你 insert into 那句能运行咩?还是我不熟悉 mysql 的语法孤陋寡闻
    lazy0327
        2
    lazy0327  
       2019-06-21 17:55:31 +08:00
    试了一下,原来确实可以运行,这个写法第一次见呢。
    那你这个结果有什么问题呢,两个表都插了两条数据
    jihadwk
        3
    jihadwk  
       2019-06-21 18:01:48 +08:00
    看了一遍,没毛病
    Beeethoven
        4
    Beeethoven  
       2019-06-21 18:02:58 +08:00
    这个结果是正确的啊
    wjfz
        5
    wjfz  
       2019-06-21 18:05:27 +08:00
    你想要什么结果
    wjfz
        6
    wjfz  
       2019-06-21 18:08:22 +08:00
    2019-01-01 1 2019-01-01 1
    2019-01-01 1 2019-01-02 1
    2019-01-02 1 2019-01-01 1
    2019-01-02 1 2019-01-02 1

    把 where 去掉关联关系就比较清楚了
    lastpass
        7
    lastpass  
       2019-06-21 18:09:50 +08:00 via Android
    我执行了一遍。没有明白你想表达什么?
    出现一条数据有什么问题吗?
    Perterually
        8
    Perterually  
    OP
       2019-06-21 18:17:49 +08:00
    @lastpass 这个查询应该没有数据啊,但是会出现一条数据
    Perterually
        9
    Perterually  
    OP
       2019-06-21 18:18:12 +08:00
    @wjfz 按说查询应该没有数据
    Perterually
        10
    Perterually  
    OP
       2019-06-21 18:21:07 +08:00
    抱歉...我搞错了..我少了一个条件..

    SELECT
    a.*,b.*
    from
    grab.tmp_a as a
    inner join
    grab.tmp_b as b
    on
    a.id = b.id and
    a.date_a = b.date_b
    WHERE
    a.date_a > b.date_b;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2559 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 15:26 · PVG 23:26 · LAX 07:26 · JFK 10:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.