Bug #121013 subquery_to_derived causes row count mismatch with window function + LEFT JOIN
Submitted: 27 Jul 9:57 Modified: 27 Jul 14:00
Reporter: Jacob Ding Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S3 (Non-critical)
Version:9.7.1 OS:MacOS
Assigned to: CPU Architecture:ARM
Tags: logical-bug

[27 Jul 9:57] Jacob Ding
Description:
```sql
CREATE TABLE t0 (id INT PRIMARY KEY, c0 INT, c1 DECIMAL(20,4), c2 VARCHAR(50));
CREATE TABLE t1 (id INT PRIMARY KEY, c0 INT, c1 DECIMAL(20,4), c2 VARCHAR(50));
CREATE TABLE t2 (id INT PRIMARY KEY, c0 INT, c1 DECIMAL(20,4), c2 VARCHAR(50));
INSERT INTO t0 VALUES (1,NULL,'0.0000',' 1'),(2,0,'0.0001',' 1'),(3,1,'0.0000','100'),(4,-1,NULL,'1e10'),(5,0,'0.0000','0'),(6,2147483647,'0.0000','100'),(7,-2147483648,'0.0001','abc'),(8,0,'0.0000','0');
INSERT INTO t1 VALUES (1,NULL,'9999999999999999.9999',' 1'),(2,0,'0.0000','1e10'),(3,1,'0.0000','0'),(4,-1,'-0.0001','-1.5'),(5,-2147483648,NULL,'abc'),(6,0,'-9999999999999999.9999',NULL),(7,0,'0.0001','1e10'),(8,1,NULL,'1e10');
INSERT INTO t2 VALUES (1,NULL,NULL,' 1'),(2,0,'0.0001',NULL),(3,1,'0.0000',' 1'),(4,-1,'0.0000','-0'),(5,2147483647,'0.0000',''),(6,0,'-9999999999999999.9999','abc'),(7,0,'0.0000','100'),(8,2147483647,'9999999999999999.9999',' 1');

SET SESSION optimizer_switch = 'subquery_to_derived=off';
SELECT t0.id, t0.c1, AVG(t1.c1) OVER (PARTITION BY t0.c0 ORDER BY t0.id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS avg_c1
FROM t0 LEFT JOIN t1 ON t0.c0 = t1.c0
WHERE t0.c1 <=> (SELECT c1 FROM t2 WHERE t2.c0 = t0.c0 LIMIT 1)
ORDER BY t0.id;
-- 6 rows

SET SESSION optimizer_switch = 'subquery_to_derived=on';
SELECT t0.id, t0.c1, AVG(t1.c1) OVER (PARTITION BY t0.c0 ORDER BY t0.id
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS avg_c1
FROM t0 LEFT JOIN t1 ON t0.c0 = t1.c0
WHERE t0.c1 <=> (SELECT c1 FROM t2 WHERE t2.c0 = t0.c0 LIMIT 1)
ORDER BY t0.id;
-- 3 rows
```

Changing subquery_to_derived affects the result row count (6 vs 3).

How to repeat:
Tested on MySQL 8.4.10 and 9.7.1 (Homebrew, macOS arm64). The bug is
reproducible on both versions. Execute the above test case; the first
SELECT returns 6 rows, the second returns 3 rows.
[27 Jul 14:00] Chaithra Marsur Gopala Reddy
Hi Jacob Ding,

Thank you for the test case. Verified on 9.7.1. We are not seeing the issue on 8.4.10.

Thanks,
Chaithra