| Bug #21302 | Result not properly sorted when using an ORDER BY on a second table in a join | ||
|---|---|---|---|
| Submitted: | 26 Jul 2006 16:44 | Modified: | 25 Sep 2006 19:44 |
| Reporter: | jocelyn fournier (Silver Quality Contributor) | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S2 (Serious) |
| Version: | 5.0.25-BK, 5.0.22 | OS: | Any (ALL) |
| Assigned to: | Georgi Kodinov | CPU Architecture: | Any |
[26 Jul 2006 16:44]
jocelyn fournier
[26 Jul 2006 18:31]
Valeriy Kravchuk
Thank you for a bug report. Verified just as described with 5.0.25-BK on Linux:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.0.25 |
+-----------+
1 row in set (0.00 sec)
mysql> CREATE TABLE `test_ligne` (
-> `id` tinyint(4) NOT NULL,
-> `colonne` varchar(50) NOT NULL,
-> PRIMARY KEY (`id`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO `test_ligne` VALUES (1, 'label_1');
Query OK, 1 row affected (0.02 sec)
mysql> INSERT INTO `test_ligne` VALUES (2, 'label_2');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `test_ligne` VALUES (3, 'label_3');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO `test_ligne` VALUES (4, 'label_4');
Query OK, 1 row affected (0.00 sec)
mysql> SELECT t1.colonne as a, t2.colonne as b
-> FROM test_ligne t1
-> LEFT JOIN test_ligne t2 ON (t1.id = t2.id AND t2.id = 2)
-> ORDER BY b;
+---------+---------+
| a | b |
+---------+---------+
| label_1 | NULL |
| label_2 | label_2 |
| label_3 | NULL |
| label_4 | NULL |
+---------+---------+
4 rows in set (0.00 sec)
mysql> EXPLAIN SELECT t1.colonne as a, t2.colonne as b FROM test_ligne t1 LEFT
JOIN test_ligne t2 ON (t1.id = t2.id AND t2.id = 2) ORDER BY b\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t1
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4
Extra:
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: t2
type: const
possible_keys: PRIMARY
key: PRIMARY
key_len: 1
ref: const
rows: 1
Extra:
2 rows in set (0.00 sec)
mysql> SELECT t1.colonne as a, t2.colonne as b FROM test_ligne t1 LEFT JOIN te
st_ligne t2 ON (t1.id = t2.id AND t2.id = 2) ORDER BY b IS NULL;
+---------+---------+
| a | b |
+---------+---------+
| label_1 | NULL |
| label_2 | label_2 |
| label_3 | NULL |
| label_4 | NULL |
+---------+---------+
4 rows in set (0.01 sec)
mysql> SELECT t1.colonne as a, t2.colonne as b FROM test_ligne t1 LEFT JOIN te
st_ligne t2 ON (t1.id = t2.id AND t2.id = 2) ORDER BY (b IS NULL);
+---------+---------+
| a | b |
+---------+---------+
| label_1 | NULL |
| label_2 | label_2 |
| label_3 | NULL |
| label_4 | NULL |
+---------+---------+
4 rows in set (0.01 sec)
mysql> ALTER TABLE test_ligne DROP PRIMARY KEY, ADD KEY (id);
Query OK, 4 rows affected (0.03 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT t1.colonne as a, t2.colonne as b FROM test_ligne t1 LEFT JOIN te
st_ligne t2 ON (t1.id = t2.id AND t2.id = 2) ORDER BY b IS NULL;
+---------+---------+
| a | b |
+---------+---------+
| label_2 | label_2 |
| label_1 | NULL |
| label_4 | NULL |
| label_3 | NULL |
+---------+---------+
4 rows in set (0.01 sec)
mysql> EXPLAIN SELECT t1.colonne as a, t2.colonne as b FROM test_ligne t1 LEFT
JOIN test_ligne t2 ON (t1.id = t2.id AND t2.id = 2) ORDER BY b IS NULL\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: t1
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 4
Extra: Using temporary; Using filesort
*************************** 2. row ***************************
id: 1
select_type: SIMPLE
table: t2
type: ref
possible_keys: id
key: id
key_len: 1
ref: const
rows: 1
Extra:
2 rows in set (0.00 sec)
[9 Aug 2006 11:19]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/10195 ChangeSet@1.2235, 2006-08-09 14:19:10+03:00, gkodinov@macbook.gmz +4 -0 Bug #21302: Result not properly sorted when using an ORDER BY on a second table in a join The optimizer removes redundant columns in ORDER BY it is considering redundant every reference to const table column, e.g b in : create table t1 (a int, b int, primary key(a)); select 1 from t1 order by b where a = 1 But it must not remove references to const table columns if the const table is an outer table because there still can be 2 values : the const value and NULL. e.g.: create table t1 (a int, b int, primary key(a)); select t2.b c from t1 left join t1 t2 on (t1.a = t2.a and t2.a = 5) order by c;
[14 Aug 2006 12:46]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/10359 ChangeSet@1.2235, 2006-08-14 15:45:48+03:00, gkodinov@macbook.gmz +4 -0 Bug #21302: Result not properly sorted when using an ORDER BY on a second table in a join The optimizer removes redundant columns in ORDER BY. It is considering redundant every reference to const table column, e.g b in : create table t1 (a int, b int, primary key(a)); select 1 from t1 order by b where a = 1 But it must not remove references to const table columns if the const table is an outer table because there still can be 2 values : the const value and NULL. e.g.: create table t1 (a int, b int, primary key(a)); select t2.b c from t1 left join t1 t2 on (t1.a = t2.a and t2.a = 5) order by c;
[15 Aug 2006 9:51]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/10437 ChangeSet@1.2255, 2006-08-15 13:01:04+03:00, gkodinov@rakia.(none) +2 -0 Bug #21302: Result not properly sorted when using an ORDER BY on a second table in a join - undeterministic output of the test case removed.
[15 Aug 2006 12:50]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/10470 ChangeSet@1.2256, 2006-08-15 15:48:49+03:00, gkodinov@macbook.gmz +2 -0 Bug #21302: Result not properly sorted when using an ORDER BY on a second table in a join - undeterminstic tests fixed
[29 Aug 2006 13:22]
Evgeny Potemkin
Fixed in 5.0.25
[4 Sep 2006 11:44]
Evgeny Potemkin
Fixed in 5.1.12
[25 Sep 2006 19:44]
Paul DuBois
Noted in 5.0.25, 5.1.12 changelogs.
