Description:
Incorrect Hash Semijoin Execution when transforming semijoin condition.
How to repeat:
SELECT ALL t0.c2 FROM t0 RIGHT OUTER JOIN t1 ON t1.c2 = t0.c2 WHERE t1.c0 IN
(SELECT t1.c0 FROM t1
WHERE (t0.c1 IN (SELECT t0.c1 FROM t0 ))
XOR (t1.c2 IN (SELECT t1.c2 FROM t1 )));
CREATE TABLE `t0` (
`c1` float unsigned zerofill DEFAULT NULL,
`c2` float DEFAULT NULL,
UNIQUE KEY `c1` (`c1`)
);
CREATE TABLE `t1` (
`c0` longtext,
`c2` float DEFAULT NULL
);
INSERT INTO `t1` VALUES ('-158770278',1188150000);
mysql> set optimizer_switch = 'semijoin=on';
mysql> SELECT ALL t0.c2 FROM t0 RIGHT OUTER JOIN t1 ON t1.c2 = t0.c2 WHERE t1.c0 IN (SELECT t1.c0
FROM t1 WHERE (t0.c1 IN (SELECT t0.c1 FROM t0 )) XOR (t1.c2 IN (SELECT t1.c2 FROM t1 )));
Empty set (0.00 sec)
mysql> set optimizer_switch = 'semijoin=off';
mysql> SELECT ALL t0.c2 FROM t0 RIGHT OUTER JOIN t1 ON t1.c2 = t0.c2 WHERE t1.c0 IN (SELECT t1.c0
FROM t1 WHERE (t0.c1 IN (SELECT t0.c1 FROM t0 )) XOR (t1.c2 IN (SELECT t1.c2 FROM t1 )));
+------+
| c2 |
+------+
| NULL |
+------+
1 row in set (0.00 sec)
Description: Incorrect Hash Semijoin Execution when transforming semijoin condition. How to repeat: SELECT ALL t0.c2 FROM t0 RIGHT OUTER JOIN t1 ON t1.c2 = t0.c2 WHERE t1.c0 IN (SELECT t1.c0 FROM t1 WHERE (t0.c1 IN (SELECT t0.c1 FROM t0 )) XOR (t1.c2 IN (SELECT t1.c2 FROM t1 ))); CREATE TABLE `t0` ( `c1` float unsigned zerofill DEFAULT NULL, `c2` float DEFAULT NULL, UNIQUE KEY `c1` (`c1`) ); CREATE TABLE `t1` ( `c0` longtext, `c2` float DEFAULT NULL ); INSERT INTO `t1` VALUES ('-158770278',1188150000); mysql> set optimizer_switch = 'semijoin=on'; mysql> SELECT ALL t0.c2 FROM t0 RIGHT OUTER JOIN t1 ON t1.c2 = t0.c2 WHERE t1.c0 IN (SELECT t1.c0 FROM t1 WHERE (t0.c1 IN (SELECT t0.c1 FROM t0 )) XOR (t1.c2 IN (SELECT t1.c2 FROM t1 ))); Empty set (0.00 sec) mysql> set optimizer_switch = 'semijoin=off'; mysql> SELECT ALL t0.c2 FROM t0 RIGHT OUTER JOIN t1 ON t1.c2 = t0.c2 WHERE t1.c0 IN (SELECT t1.c0 FROM t1 WHERE (t0.c1 IN (SELECT t0.c1 FROM t0 )) XOR (t1.c2 IN (SELECT t1.c2 FROM t1 ))); +------+ | c2 | +------+ | NULL | +------+ 1 row in set (0.00 sec)