17
17
CREATE TABLE t3 (a int not null, b char (10) not null);
18
18
insert into t3 values (3,'f'),(4,'y'),(5,'z'),(6,'c');
19
19
select t1.a,t4.y from t1,(select t2.a as y from t2,(select t3.b from t3 where t3.a>3) as t5 where t2.b=t5.b) as t4 where t1.a = t4.y;
20
--error ER_BAD_FIELD_ERROR
21
21
SELECT a FROM (SELECT 1 FROM (SELECT 1) a HAVING a=1) b;
22
--error ER_NON_UNIQ_ERROR
23
23
SELECT a,b as a FROM (SELECT '1' as a,'2' as b) b HAVING a=1;
24
24
SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=2;
25
25
SELECT a,2 as a FROM (SELECT '1' as a) b HAVING a=1;
26
--error ER_BAD_FIELD_ERROR
27
27
SELECT 1 FROM (SELECT 1) a WHERE a=2;
28
--error ER_BAD_FIELD_ERROR
29
29
SELECT (SELECT 1) as a FROM (SELECT 1 FROM t1 HAVING a=1) as a;
31
30
select * from t1 as x1, (select * from t1) as x2;
32
31
explain select * from t1 as x1, (select * from t1) as x2;
33
32
drop table if exists t2,t3;
48
47
create table t1(a int not null, t char(8), index(a));
54
52
eval insert into t1 values ($1,'$1');
59
56
SELECT * FROM (SELECT * FROM t1) as b ORDER BY a ASC LIMIT 0,20;
61
57
explain select count(*) from t1 as tt1, (select * from t1) as tt2;
63
59
SELECT * FROM (SELECT (SELECT * FROM (SELECT 1 as a) as a )) as b;
64
60
select * from (select 1 as a) b left join (select 2 as a) c using(a);
65
--error ER_BAD_FIELD_ERROR
66
62
SELECT * FROM (SELECT 1 UNION SELECT a) b;
67
--error ER_BAD_FIELD_ERROR
68
64
SELECT 1 as a FROM (SELECT a UNION SELECT 1) b;
69
--error ER_BAD_FIELD_ERROR
70
66
SELECT 1 as a FROM (SELECT 1 UNION SELECT a) b;
71
--error ER_BAD_FIELD_ERROR
72
68
select 1 from (select 2) a order by 0;
84
80
# test->used_keys test for derived tables
86
create table t1 (mat_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, matintnum CHAR(6) NOT NULL, test INT NULL);
87
create table t2 (mat_id INT NOT NULL, pla_id INT NOT NULL);
82
create table t1 (mat_id MEDIUMINT NOT NULL AUTO_INCREMENT PRIMARY KEY, matintnum CHAR(6) NOT NULL, test MEDIUMINT NULL);
83
create table t2 (mat_id MEDIUMINT NOT NULL, pla_id MEDIUMINT NOT NULL);
88
84
insert into t1 values (NULL, 'a', 1), (NULL, 'b', 2), (NULL, 'c', 3), (NULL, 'd', 4), (NULL, 'e', 5), (NULL, 'f', 6), (NULL, 'g', 7), (NULL, 'h', 8), (NULL, 'i', 9);
89
85
insert into t2 values (1, 100), (1, 101), (1, 102), (2, 100), (2, 103), (2, 104), (3, 101), (3, 102), (3, 105);
117
115
create table t1 (E1 INTEGER NOT NULL, E2 INTEGER NOT NULL, E3 INTEGER NOT NULL, PRIMARY KEY(E1)
119
117
insert into t1 VALUES(1,1,1), (2,2,1);
121
118
select count(*) from t1 INNER JOIN (SELECT A.E1, A.E2, A.E3 FROM t1 AS A WHERE A.E3 = (SELECT MAX(B.E3) FROM t1 AS B WHERE A.E2 = B.E2)) AS THEMAX ON t1.E1 = THEMAX.E2 AND t1.E1 = t1.E2;
122
119
explain select count(*) from t1 INNER JOIN (SELECT A.E1, A.E2, A.E3 FROM t1 AS A WHERE A.E3 = (SELECT MAX(B.E3) FROM t1 AS B WHERE A.E2 = B.E2)) AS THEMAX ON t1.E1 = THEMAX.E2 AND t1.E1 = t1.E2;
125
122
create table t1 (a int);
126
123
insert into t1 values (1),(2);
128
124
select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b;
129
125
explain select * from ( select * from t1 union select * from t1) a,(select * from t1 union select * from t1) b;
129
# multi-update & multi-delete with derived tables
132
`N` int(11) NOT NULL default '0',
133
`M` int(1) default '0'
134
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
135
INSERT INTO `t1` (N, M) VALUES (1, 0),(1, 0),(1, 0),(2, 0),(2, 0),(3, 0);
136
UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2;
139
UPDATE `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2, P2.N = 2;
141
UPDATE `t1` AS P1 INNER JOIN (SELECT aaaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N SET P1.M = 2;
142
delete P1.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
144
--replace_result P2 p2
145
--error ER_NON_UPDATABLE_TABLE
146
delete P1.*,P2.* from `t1` AS P1 INNER JOIN (SELECT N FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
148
delete P1.* from `t1` AS P1 INNER JOIN (SELECT aaa FROM `t1` GROUP BY N HAVING Count(M) > 1) AS P2 ON P1.N = P2.N;
133
152
# correct lex->current_select
135
CREATE TEMPORARY TABLE t1 (
136
OBJECTID int NOT NULL default 0,
137
SORTORDER int NOT NULL auto_increment,
155
OBJECTID int(11) NOT NULL default '0',
156
SORTORDER int(11) NOT NULL auto_increment,
138
157
KEY t1_SortIndex (SORTORDER),
139
158
KEY t1_IdIndex (OBJECTID)
141
CREATE TEMPORARY TABLE t2 (
143
PARID int default NULL,
159
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
161
ID int(11) default NULL,
162
PARID int(11) default NULL,
144
163
UNIQUE KEY t2_ID_IDX (ID),
145
164
KEY t2_PARID_IDX (PARID)
165
) engine=MyISAM DEFAULT CHARSET=latin1;
147
166
INSERT INTO t2 VALUES (1000,0),(1001,0),(1002,0),(1003,0),(1008,1),(1009,1),(1010,1),(1011,1),(1016,2);
148
CREATE TEMPORARY TABLE t3 (
168
ID int(11) default NULL,
150
169
DATA decimal(10,2) default NULL,
151
170
UNIQUE KEY t3_ID_IDX (ID)
171
) engine=MyISAM DEFAULT CHARSET=latin1;
153
172
INSERT INTO t3 VALUES (1000,0.00),(1001,0.25),(1002,0.50),(1003,0.75),(1008,1.00),(1009,1.25),(1010,1.50),(1011,1.75);
154
173
select 497, TMP.ID, NULL from (select 497 as ID, MAX(t3.DATA) as DATA from t1 join t2 on (t1.ObjectID = t2.ID) join t3 on (t1.ObjectID = t3.ID) group by t2.ParID order by DATA DESC) as TMP;
155
174
drop table t1, t2, t3;
158
177
# explain derived
160
CREATE TABLE t1 (name char(1) default NULL, val int default NULL);
179
CREATE TABLE t1 (name char(1) default NULL, val int(5) default NULL);
161
180
INSERT INTO t1 VALUES ('a',1), ('a',2), ('a',2), ('a',2), ('a',3), ('a',6), ('a',7), ('a',11), ('a',11), ('a',12), ('a',13), ('a',13), ('a',20), ('b',2), ('b',3), ('b',4), ('b',5);
162
181
SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
163
182
explain SELECT s.name, AVG(s.val) AS median FROM (SELECT x.name, x.val FROM t1 x, t1 y WHERE x.name=y.name GROUP BY x.name, x.val HAVING SUM(y.val <= x.val) >= COUNT(*)/2 AND SUM(y.val >= x.val) >= COUNT(*)/2) AS s GROUP BY s.name;
176
195
# select list counter
178
CREATE TABLE `t1` ( `itemid` int NOT NULL default 0, `grpid` varchar(15) NOT NULL default '', `vendor` int NOT NULL default 0, `date_` date NOT NULL default '1900-01-01', `price` decimal(12,2) NOT NULL default '0.00', PRIMARY KEY (`itemid`,`grpid`,`vendor`,`date_`), KEY `itemid` (`itemid`,`vendor`), KEY `itemid_2` (`itemid`,`date_`));
197
CREATE TABLE `t1` ( `itemid` int(11) NOT NULL default '0', `grpid` varchar(15) NOT NULL default '', `vendor` int(11) NOT NULL default '0', `date_` date NOT NULL default '0000-00-00', `price` decimal(12,2) NOT NULL default '0.00', PRIMARY KEY (`itemid`,`grpid`,`vendor`,`date_`), KEY `itemid` (`itemid`,`vendor`), KEY `itemid_2` (`itemid`,`date_`));
179
198
insert into t1 values (128, 'rozn', 2, curdate(), 10),
180
199
(128, 'rozn', 1, curdate(), 10);
181
200
SELECT MIN(price) min, MAX(price) max, AVG(price) avg FROM (SELECT SUBSTRING( MAX(concat(date_,";",price)), 12) price FROM t1 WHERE itemid=128 AND grpid='rozn' GROUP BY itemid, grpid, vendor) lastprices;