Bug #10833 View sort doesn't work
Submitted: 24 May 2005 16:52 Modified: 6 Jun 2005 10:15
Reporter: Sergi Vergés Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: Optimizer Severity:S2 (Serious)
Version:5.0.3 beta nt OS:Windows (windows 2000,xp)
Assigned to: Assigned Account CPU Architecture:Any

[24 May 2005 16:52] Sergi Vergés
Description:
I've created a view based on two tables with a simple join.
When I try to sort the results ASC o DESC the sorted results are not correct.

How to repeat:
- two tables
DELIMITER //

DROP TABLE VALORS
//
CREATE TABLE VALORS(
	VALOR_ID INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
	VALOR_NOM VARCHAR(20) NOT NULL,
	VALOR_VALOR VARCHAR(20) NOT NULL,
	VALOR_DESCRIPCIO VARCHAR(100),
	VALOR_BLOCK	VARCHAR(1),
	VALOR_ORDENACIO INTEGER default 0,
	VALOR_MESTRE_ID INTEGER NOT NULL
)ENGINE=InnoDB, CHARACTER SET latin1, COLLATE latin1_spanish_ci
//
DROP TABLE VALORS_MESTRE
//
CREATE TABLE VALORS_MESTRE(
	VALOR_MESTRE_ID INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
	VALOR_NOM VARCHAR(20),
	VALOR_DESCRIPCIO VARCHAR(100),
	VALOR_BLOCK	VARCHAR(1)
)ENGINE=InnoDB, CHARACTER SET latin1, COLLATE latin1_spanish_ci
//
ALTER TABLE VALORS
ADD CONSTRAINT VALORS_FK1 FOREIGN KEY
(
VALOR_MESTRE_ID
)
REFERENCES VALORS_MESTRE
(
VALOR_MESTRE_ID
) 
//
ALTER TABLE VALORS
ADD CONSTRAINT VALORS_UK1 UNIQUE
(
VALOR_NOM,
VALOR_MESTRE_ID
)
//
ALTER TABLE VALORS
ADD CONSTRAINT VALORS_UK2 UNIQUE
(
VALOR_VALOR,
VALOR_MESTRE_ID
)
//

- insert the following values that represents the months
insert into valors_mestre(valor_nom, valor_descripcio,valor_block)
values('MESOS','Mesos de l\'any','S')
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('GENER','01','Gener','S',1, 1)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('FEBRER','02','Febrer','S',1, 2)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('MARÇ','03','Març','S',1, 3)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('ABRIL','04','Abril','S',1, 4)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('MAIG','05','Maig','S',1, 5)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('JUNY','06','Juny','S',1, 6)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('JULIOL','07','Juliol','S',1, 7)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('AGOST','08','Agost','S',1, 8)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('SETEMBRE','09','Setembre','S',1, 9)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('OCTUBRE','10','Octure','S',1, 10)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('NOVEMBRE','11','Novembre','S',1, 11)
//
insert into valors(valor_nom, valor_valor,valor_descripcio, valor_block, valor_mestre_id, valor_ordenacio)
values('DESEMBRE','12','Desembre','S',1, 12)
//

- Create the view
DROP VIEW LLISTA_VALORS
//
CREATE VIEW LLISTA_VALORS AS
		SELECT M.VALOR_MESTRE_ID as "Mestre", M.VALOR_NOM as "TIPUS", D.VALOR_NOM AS "Codi", D.VALOR_VALOR as "Valor", D.VALOR_ORDENACIO AS "ORDRE"
		FROM VALORS_MESTRE M, VALORS D
		WHERE D.VALOR_MESTRE_ID=M.VALOR_MESTRE_ID
//

- query
SELECT valor, codi FROM LLISTA_VALORS
WHERE TIPUS='MESOS' ORDER BY VALOR ASC;
[25 May 2005 9:21] Vasily Kishkin
Tested on Win 2000 Sp4, MySQL server 5.0.6 beta

Valor   Codi
01      GENER
07      JULIOL
02      FEBRER
08      AGOST
03      MARC
09      SETEMBRE
04      ABRIL
10      OCTUBRE
05      MAIG
11      NOVEMBRE
06      JUNY
12      DESEMBRE
[6 Jun 2005 10:15] Igor Babaev
This bug is duplicate for bug #7422:
ORDER BY does not work a over merged view. 

It can be demonstrated by the following simple script:
CREATE TABLE t1(a char(2) primary key, b char(2));
CREATE TABLE t2(a char(2), b char(2), index i(a));
INSERT INTO t1 VALUES ('a','1'), ('b','2');
INSERT INTO t2 VALUES ('a','5'), ('a','6'), ('b','5'), ('b','6');
CREATE VIEW v AS
  SELECT t1.b as c, t2.b as d FROM t1,t2 WHERE t1.a=t2.a;
SELECT d, c FROM v ORDER BY d;

mysql> SELECT d, c FROM v ORDER BY d;
+------+------+
| d    | c    |
+------+------+
| 5    | 1    |
| 6    | 1    |
| 5    | 2    |
| 6    | 2    |
+------+------+