programing

Maria의 관련 서브쿼리에서 DateTimes 잘라내기DB

sourcejob 2023. 1. 27. 21:18
반응형

Maria의 관련 서브쿼리에서 DateTimes 잘라내기DB

그룹별 최대 쿼리 중 하나가 예기치 않은 결과를 반환하는 것이었습니다.나는 그것을 다음과 같은 문제로 요약했다.

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)

위의 쿼리는 반환됩니다.1예상대로 MYSQL에 있지만0MariaDB에 있습니다.

반환되는 데이터가 테이블의 데이터와 다르기 때문에 이것은 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에 의해 확인되었습니다.여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/35907735/truncation-of-datetimes-in-correlated-subqueries-in-mariadb

반응형