Details
Description
Query returns an empty set, but the same query with additional strict conditions (adding WHERE ..) returns some results.
CREATE TABLE t1 (i1 int); |
INSERT INTO t1 VALUES (NULL),(3),(8),(0),(2); |
|
CREATE TABLE t2 (v1 varchar(10) CHARACTER SET utf8, KEY v1 (v1(3))); |
INSERT INTO t2 VALUES ('k'),('rid'),('f'),('x'); |
|
CREATE TABLE t3 (v1 varchar(10) CHARACTER SET utf8, l1 varchar(10), pk int NOT NULL PRIMARY KEY, i1 int , i2 int, KEY v1 (v1(3))); |
INSERT INTO t3 VALUES ('measure','m',2,NULL,2),('o','k',3,1970208768,NULL); |
|
CREATE TABLE t4 (v1 varchar(10) CHARACTER SET utf8, l1 varchar(10), pk int NOT NULL PRIMARY KEY, i1 int , i2 int, KEY v1 (v1(3))); |
INSERT INTO t4 VALUES ('e','we',1,-1,1),('n','o',2,4,4),('r','o',3,3,2),('o','secure',4,NULL,NULL),('t','e',8,-1,6); |
|
SELECT 1 FROM t3 JOIN (t1 LEFT JOIN t4 ON t4.pk = t1.i1) ON ( t4.l1 < ANY (SELECT MAX(t2.v1) FROM t2)); |
SELECT 1 FROM t3 JOIN (t1 LEFT JOIN t4 ON t4.pk = t1.i1) ON ( t4.l1 < ANY (SELECT MAX(t2.v1) FROM t2)) WHERE (t4.i2 <=2); |
MariaDB [test2]> SELECT 1 FROM t3 JOIN (t1 LEFT JOIN t4 ON t4.pk = t1.i1) ON ( t4.l1 < ANY (SELECT MAX(t2.v1) FROM t2));
|
Empty set (0.001 sec)
|
|
MariaDB [test2]> SELECT 1 FROM t3 JOIN (t1 LEFT JOIN t4 ON t4.pk = t1.i1) ON ( t4.l1 < ANY (SELECT MAX(t2.v1) FROM t2)) WHERE (t4.i2 <=2);
|
+---+
|
| 1 |
|
+---+
|
| 1 |
|
| 1 |
|
+---+
|
2 rows in set (0.001 sec)
|
|
MariaDB [test2]> explain extended SELECT 1 FROM t3 JOIN (t1 LEFT JOIN t4 ON t4.pk = t1.i1) ON ( t4.l1 < ANY (SELECT MAX(t2.v1) FROM t2));
|
+------+-------------+-------+--------+---------------+---------+---------+-------------+------+----------+------------------------------------+
|
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
+------+-------------+-------+--------+---------------+---------+---------+-------------+------+----------+------------------------------------+
|
| 1 | PRIMARY | t3 | index | NULL | PRIMARY | 4 | NULL | 2 | 100.00 | Using index |
|
| 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 5 | 100.00 | Using join buffer (flat, BNL join) |
|
| 1 | PRIMARY | t4 | eq_ref | PRIMARY | PRIMARY | 4 | test2.t1.i1 | 1 | 100.00 | Using where |
|
| 2 | SUBQUERY | t2 | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | |
|
+------+-------------+-------+--------+---------------+---------+---------+-------------+------+----------+------------------------------------+
|
4 rows in set, 1 warning (0.001 sec)
|
|
Note (Code 1003): /* select#1 */ select 1 AS `1` from `test2`.`t3` join `test2`.`t1` left join `test2`.`t4` on(`test2`.`t4`.`pk` = `test2`.`t1`.`i1` and `test2`.`t1`.`i1` is not null) where <nop>(<in_optimizer>(`test2`.`t4`.`l1`,<max>(/* select#2 */ select max(`test2`.`t2`.`v1`) from `test2`.`t2`) > <cache>(convert(`test2`.`t4`.`l1` using utf8))))
|
|
MariaDB [test2]> explain extended SELECT 1 FROM t3 JOIN (t1 LEFT JOIN t4 ON t4.pk = t1.i1) ON ( t4.l1 < ANY (SELECT MAX(t2.v1) FROM t2)) WHERE (t4.i2 <=2);
|
+------+-------------+-------+--------+---------------+---------+---------+-------------+------+----------+-------------------------------------------------+
|
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
|
+------+-------------+-------+--------+---------------+---------+---------+-------------+------+----------+-------------------------------------------------+
|
| 1 | PRIMARY | t3 | index | NULL | PRIMARY | 4 | NULL | 2 | 100.00 | Using index |
|
| 1 | PRIMARY | t1 | ALL | NULL | NULL | NULL | NULL | 5 | 100.00 | Using where; Using join buffer (flat, BNL join) |
|
| 1 | PRIMARY | t4 | eq_ref | PRIMARY | PRIMARY | 4 | test2.t1.i1 | 1 | 100.00 | Using where |
|
| 2 | SUBQUERY | t2 | ALL | NULL | NULL | NULL | NULL | 4 | 100.00 | |
|
+------+-------------+-------+--------+---------------+---------+---------+-------------+------+----------+-------------------------------------------------+
|
4 rows in set, 1 warning (0.000 sec)
|
|
Note (Code 1003): /* select#1 */ select 1 AS `1` from `test2`.`t3` join `test2`.`t1` join `test2`.`t4` where `test2`.`t4`.`pk` = `test2`.`t1`.`i1` and `test2`.`t4`.`i2` <= 2 and <nop>(<in_optimizer>(`test2`.`t4`.`l1`,<max>(/* select#2 */ select max(`test2`.`t2`.`v1`) from `test2`.`t2`) > <cache>(convert(`test2`.`t4`.`l1` using utf8))))
|