Description:
after modifying the insertion sequence of the table,the results of the same query are inconsistent.
query result for schene 1:
mysql> SELECT t0.* FROM t1 RIGHT JOIN t0 ON t1.c1 IS NULL WHERE (((DEFAULT(t1.c0))<('w'))>=(((t0.c1))) IS NULL);
+----+------+-----+
| c0 | c1 | c2 |
+----+------+-----+
| 1 | NULL | 123 |
| 2 | 100 | 456 |
+----+------+-----+
2 rows in set (0.00 sec)
query result for scene 2:
mysql> SELECT t0.* FROM t1 RIGHT JOIN t0 ON t1.c1 IS NULL WHERE (((DEFAULT(t1.c0))<('w'))>=(((t0.c1))) IS NULL);
+----+------+-----+
| c0 | c1 | c2 |
+----+------+-----+
| 1 | NULL | 123 |
+----+------+-----+
1 row in set (0.00 sec)
How to repeat:
DROP TABLE IF EXISTS `t0`;
CREATE TABLE `t0` (
`c0` char(1) NOT NULL,
`c1` decimal(10,0),
`c2` varchar(201) NOT NULL
) ENGINE=InnoDB;
DROP TABLE IF EXISTS `t1`;
CREATE TABLE `t1` (
`c0` char(1) NOT NULL DEFAULT 'x',
`c1` decimal(10,0)
) ENGINE=InnoDB;
INSERT INTO `t1` VALUES ('a',1),('b',2),('c',3),('d',4),('e',5);
TRUNCATE TABLE t0;
INSERT INTO `t0` VALUES ('1',NULL,'123'),('2',100,'456');
SELECT t0.* FROM t1 RIGHT JOIN t0 ON t1.c1 IS NULL WHERE (((DEFAULT(t1.c0))<('w'))>=(((t0.c1))) IS NULL);
TRUNCATE TABLE t0;
INSERT INTO `t0` VALUES ('2',100,'456'),('1',NULL,'123');
SELECT t0.* FROM t1 RIGHT JOIN t0 ON t1.c1 IS NULL WHERE (((DEFAULT(t1.c0))<('w'))>=(((t0.c1))) IS NULL);
Suggested fix:
the query result for scene 2 is wrong. it also shall return 2 rows.