Bug #118836 | adding a having clause that return 1/TRUE, the query returns a different and wrong empty result. | ||
---|---|---|---|
Submitted: | 14 Aug 3:01 | Modified: | 18 Aug 16:21 |
Reporter: | Alice Alice | Email Updates: | |
Status: | Verified | Impact on me: | |
Category: | MySQL Server: Optimizer | Severity: | S3 (Non-critical) |
Version: | 8.0.41 | OS: | Any |
Assigned to: | CPU Architecture: | Any |
[14 Aug 3:01]
Alice Alice
[18 Aug 15:54]
MySQL Verification Team
mysql> select * from t0; +-----------+ | c0 | +-----------+ | 0 | | 0.0887488 | | 0.346522 | | 0.350693 | | 0.996159 | +-----------+ 5 rows in set (0.001 sec) mysql> select * from t85; +-----------+ | c0 | +-----------+ | 0 | | 0.0168601 | | 0.346522 | | 0.36369 | | 0.47245 | | 0.492592 | | 0.535686 | | 0.586635 | | 0.656416 | | 0.965053 | | 686378000 | +-----------+ 11 rows in set (0.001 sec) mysql> SELECT t85.c0,(NOT (((DEFAULT(t85.c0))LIKE((- (t85.c0)))))) FROM t85 NATURAL RIGHT JOIN t0 WHERE t0.c0 GROUP BY t0.c0 ORDER BY CAST(t85.c0 AS DECIMAL); +----------+-----------------------------------------------+ | c0 | (NOT (((DEFAULT(t85.c0))LIKE((- (t85.c0)))))) | +----------+-----------------------------------------------+ | NULL | NULL | | NULL | NULL | | NULL | NULL | | 0.346522 | 1 | +----------+-----------------------------------------------+ 4 rows in set (0.000 sec) mysql> SELECT t85.c0,(NOT (((DEFAULT(t85.c0))LIKE((- (t85.c0)))))) FROM t85 NATURAL RIGHT JOIN t0 WHERE t0.c0 GROUP BY t0.c0 HAVING (NOT (((DEFAULT(t85.c0))LIKE((- (t85.c0)))))) ORDER BY CAST(t85.c0 AS DECIMAL); Empty set (0.001 sec) mysql> select @@version -> ; +-----------+ | @@version | +-----------+ | 9.3.0 | +-----------+ 1 row in set (0.000 sec) mysql>
[18 Aug 16:21]
MySQL Verification Team
Query 1: No HAVING clause. Query 2: With HAVING (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) Last row has this HAVING value of 1 but is not shown. I believe this bug is verified. mysql> SELECT -> t85.c0, -> (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) -> FROM -> t85 -> NATURAL RIGHT JOIN t0 -> WHERE -> t0.c0 -> GROUP BY -> t0.c0 -> ORDER BY -> CAST(t85.c0 AS DECIMAL); +----------+-------------------------------------------------+ | c0 | (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) | +----------+-------------------------------------------------+ | NULL | NULL | | NULL | NULL | | NULL | NULL | | 0.346522 | 1 | +----------+-------------------------------------------------+ 4 rows in set (0.002 sec) mysql> SELECT -> t85.c0, -> (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) -> FROM -> t85 -> NATURAL RIGHT JOIN t0 -> WHERE -> t0.c0 -> GROUP BY -> t0.c0 -> HAVING -> (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) -> ORDER BY -> CAST(t85.c0 AS DECIMAL); Empty set (0.001 sec) mysql> SELECT -> t85.c0, -> (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) -> FROM -> t85 -> NATURAL RIGHT JOIN t0 -> WHERE -> t0.c0 -> GROUP BY -> t0.c0 -> HAVING -> ( (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) -> ORDER BY -> CAST(t85.c0 AS DECIMAL); Empty set (0.002 sec) mysql> SELECT -> t85.c0, -> (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) -> FROM -> t85 -> NATURAL RIGHT JOIN t0 -> WHERE -> t0.c0 -> GROUP BY -> t0.c0 -> HAVING -> 1 -> ORDER BY -> CAST(t85.c0 AS DECIMAL); +----------+-------------------------------------------------+ | c0 | (NOT (((DEFAULT(t85.c0)) LIKE ((- (t85.c0)))))) | +----------+-------------------------------------------------+ | NULL | NULL | | NULL | NULL | | NULL | NULL | | 0.346522 | 1 | +----------+-------------------------------------------------+ 4 rows in set (0.002 sec) mysql>
[18 Aug 16:22]
MySQL Verification Team
Thank you for the report!