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

2019-06-21 17:42:30 +08:00
 Perterually
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;

结果会有一条数据出来

3748 次点击
所在节点    MySQL
10 条回复
lazy0327
2019-06-21 17:54:00 +08:00
你确定你 insert into 那句能运行咩?还是我不熟悉 mysql 的语法孤陋寡闻
lazy0327
2019-06-21 17:55:31 +08:00
试了一下,原来确实可以运行,这个写法第一次见呢。
那你这个结果有什么问题呢,两个表都插了两条数据
jihadwk
2019-06-21 18:01:48 +08:00
看了一遍,没毛病
Beeethoven
2019-06-21 18:02:58 +08:00
这个结果是正确的啊
wjfz
2019-06-21 18:05:27 +08:00
你想要什么结果
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
2019-06-21 18:09:50 +08:00
我执行了一遍。没有明白你想表达什么?
出现一条数据有什么问题吗?
Perterually
2019-06-21 18:17:49 +08:00
@lastpass 这个查询应该没有数据啊,但是会出现一条数据
Perterually
2019-06-21 18:18:12 +08:00
@wjfz 按说查询应该没有数据
Perterually
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;

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

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

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

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

© 2021 V2EX