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.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.044 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.