【问题标题】:Truncation of DateTimes in correlated subqueries in MariaDBMariaDB 中相关子查询中日期时间的截断
【发布时间】:2016-03-10 04:40:41
【问题描述】:

我的一个group-wise maximum 查询返回了意外结果。我将其提炼为以下问题:

DROP TABLE IF EXISTS maria_bug;
CREATE TABLE maria_bug (
  id INT NOT NULL,
  update_time TIMESTAMP(6) NOT NULL
);

INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.200000');
INSERT INTO maria_bug VALUES(1, '2001-01-01 00:00:00.100000');

SELECT
  m1.id,
  m1.update_time t1,
  (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id) t2
FROM maria_bug m1;

在 MySQL 5.6 上,我得到了这个:

1   2001-01-01 00:00:00.200000  2001-01-01 00:00:00.200000
1   2001-01-01 00:00:00.100000  2001-01-01 00:00:00.200000

在 MariaDB (10.0.13) 上:

1   2001-01-01 00:00:00.200000  2001-01-01 00:00:00.200000
1   2001-01-01 00:00:00.100000  2001-01-01 00:00:00.000000

为什么会这样?? MYSQL 行为是我所期望的。 MariaDB 中的某个地方是否缺少我的设置?这是在某处记录的吗?当然,这不可能是数据库中的错误,因为这是一个非常常见的查询:

SELECT COUNT(*) FROM maria_bug m1
WHERE update_time < (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id = m2.id)

上述查询在 MYSQL 中按预期返回 1,但在 MariaDB 中返回 0

【问题讨论】:

标签: mysql sql subquery mariadb correlated-subquery


【解决方案1】:

这似乎是 MariaDB 的一个错误,因为返回的数据与表中的数据不同。

mysql> SELECT *, (SELECT MAX(m2.update_time) FROM maria_bug m2 WHERE m1.id <> 0 ) max_update FROM maria_bug m1;
+----+----------------------------+----------------------------+
| id | update_time                | max_update                 |
+----+----------------------------+----------------------------+
|  1 | 2001-01-01 00:00:00.200000 | 2001-01-01 00:00:00.200000 |
|  1 | 2001-01-01 00:00:00.100000 | 2001-01-01 00:00:00.000000 |
+----+----------------------------+----------------------------+
2 rows in set (0.00 sec)

向 MariaDB 提交错误: https://jira.mariadb.org/browse/MDEV-9707

更新:该错误已由 MariaDB 确认。

【讨论】:

  • 请向 mariadb.com 提交错误报告
  • 提交的错误由 MariaDB 确认。 @RickJames
猜你喜欢
  • 1970-01-01
  • 2017-10-10
  • 2018-04-24
  • 1970-01-01
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2017-04-27
相关资源
最近更新 更多