Я хочу выполнить запрос MySQL к таблице, а затем подзапрос этой таблицы. У меня есть список объектов. Каждый объект имеет мажорную и минорную версию. Для одного объекта, который я пытаюсь найти, это «ПОСЛЕДНЯЯ ВЕРСИЯ» этого объекта: это означает, что я хочу найти максимальное (основное) для этого объекта, а затем максимальное (дополнительное) для последнего результата.
Я создаю «тестовую» базу данных MySQL:
create database test ;
use test ;
Я создал таблицу:
create table test
(
id int auto_increment,
object varchar(10),
major int,
minor int,
PRIMARY KEY (`id`)
) engine innodb;
Я заполняю эту таблицу данными:
insert into test (object, major, minor) values ('obj1',1,0) ;
insert into test (object, major, minor) values ('obj1',1,1) ;
insert into test (object, major, minor) values ('obj1',1,2) ;
insert into test (object, major, minor) values ('obj1',2,0) ;
insert into test (object, major, minor) values ('obj1',2,1) ;
Я перечисляю таблицу:
выбрать * из теста;
+----+--------+-------+-------+
| id | object | major | minor |
+----+--------+-------+-------+
| 1 | obj1 | 1 | 0 |
| 2 | obj1 | 1 | 1 |
| 3 | obj1 | 1 | 2 |
| 4 | obj1 | 2 | 0 |
| 5 | obj1 | 2 | 1 |
+----+--------+-------+-------+
5 строк в наборе (0,01 с)
Первый запрос - получить максимальные (основные) строки:
select *
from test
where object = 'obj1'
and major = (select max(major) from test);
с таким результатом:
+----+--------+-------+-------+
| id | object | major | minor |
+----+--------+-------+-------+
| 4 | obj1 | 2 | 0 |
| 5 | obj1 | 2 | 1 |
+----+--------+-------+-------+
2 ряда в наборе (0,00 с)
Затем я пытаюсь получить минор 0 версии:
select *
from
(select *
from test
where object = 'obj1'
and major = (select max(major) from test)) as t
where
t.minor = 0 ;
и все работает, результат:
+----+--------+-------+-------+
| id | object | major | minor |
+----+--------+-------+-------+
| 4 | obj1 | 2 | 0 |
+----+--------+-------+-------+
но я хочу ПОСЛЕДНЮЮ ВЕРСИЮ, поэтому я хочу найти максимальное (младшее), которое равно 1:
select *
from
(select *
from test
where object = 'obj1'
and major = (select max(major) from test)) as t
where
t.minor = (select max(minor) from t) ;
И я получаю ошибку:
ОШИБКА 1146 (42S02): таблица 'test.t' не существует
Я не понимаю, почему это не работает.
Спасибо