--disable_abort_on_error --disable_warnings DROP TABLE IF EXISTS t0, t1, t2; --enable_warnings CREATE TABLE t0 ( select_id BIGINT, values_id BIGINT ); INSERT INTO t0 SET select_id = 1, values_id = 1; # Layout like t0, but more records CREATE TABLE t1 ( select_id BIGINT, values_id BIGINT ); # "Magic" records, drop one and the crash disappears INSERT INTO t1 SET select_id = 0, values_id = 1; INSERT INTO t1 SET select_id = 0, values_id = 2; INSERT INTO t1 SET select_id = 0, values_id = 3; INSERT INTO t1 SET select_id = 1, values_id = 5; # Layout like t1, but with PRIMARY KEY CREATE TABLE t2 ( select_id BIGINT, values_id BIGINT, PRIMARY KEY(select_id,values_id) ); # harmless test # t1 WITHOUT Primary Key, ALL four records SELECT * FROM t1; SELECT values_id FROM t0 WHERE values_id IN (SELECT values_id FROM t1 WHERE select_id IN (1, 0)); # harmless test # t2 WITH Primary Key, ONLY three records INSERT INTO t2 SELECT * FROM t1; DELETE FROM t2 WHERE values_id = 3; SELECT * FROM t2; SELECT values_id FROM t0 WHERE values_id IN (SELECT values_id FROM t2 WHERE select_id IN (1, 0)); ######## t2 WITH Primary Key, ALL four records ####### DELETE FROM t2; INSERT INTO t2 SELECT * FROM t1; SELECT * FROM t2; # # The subquery itself is harmless SELECT values_id FROM t2 WHERE select_id IN (1, 0); # # EXISTS + subquery itself is harmless SELECT values_id FROM t0 WHERE EXISTS (SELECT values_id FROM t2 WHERE select_id IN (1, 0)); # # IN + subquery without WHERE is harmless SELECT values_id FROM t0 WHERE values_id IN (SELECT values_id FROM t2); # # IN + subquery with simple WHERE is harmless SELECT values_id FROM t0 WHERE values_id IN (SELECT values_id FROM t2 WHERE select_id = 0); # ############# Crashing statements !!!!! # t2 WITH Primary Key, ALL four records SELECT values_id FROM t0 WHERE values_id IN (SELECT values_id FROM t2 WHERE select_id IN (1, 0)); exit; SELECT values_id FROM t0 WHERE values_id IN (SELECT values_id FROM t2 WHERE select_id BETWEEN 0 AND 1); SELECT values_id FROM t0 WHERE values_id IN (SELECT values_id FROM t2 WHERE select_id = 0 OR select_id = 1);