Комбинированный MYSQL запрос
Подскажите можно ли составить один универсальный MYSQL запрос в моем случае вместо пятидесяти отдельных? Исходные данные, имеем число number = 5
table1
id|number
1|3
2|5
3|6
Из таблицы 1 нужно получить уникальный id для этого номера, известно что он один, если конечно такая запись имеется, в противном случае результат запроса будет пустым. Результат запроса к первой таблице в нашем случае id=2;
table2
uniq_id|id
1|1
2|2
3|2
4|2
5|3
Из таблицы 2 нужно получить диапазон уникальных uniq_id, где id равняется результату прошлого запроса из таблицы 1, если они есть, в противном случае результат запроса должен быть пустым. В данном случае это будут все uniq_id = 2,3,4
table3
uniq_id
1
2
3
5
Получить запись с максимальным существующим uniq_id в таблице 3 из диапазона, полученного из таблицы 2. В нашем случае это запись с uniq_id=3, если конечно такая запись имеется, в противном случае результат запроса будет пустым.
create table table1(id integer, num integer);
insert into table1(id, num) values(1, 3);
insert into table1(id, num) values(2, 5);
insert into table1(id, num) values(3, 6);
create table table2(uni_id integer, id integer);
insert into table2(uni_id, id) values(1, 1);
insert into table2(uni_id, id) values(2, 2);
insert into table2(uni_id, id) values(3, 2);
insert into table2(uni_id, id) values(4, 2);
insert into table2(uni_id, id) values(5, 3);
create table table3(uni_id integer);
insert into table3(uni_id) values(1);
insert into table3(uni_id) values(2);
insert into table3(uni_id) values(3);
insert into table3(uni_id) values(5);
select max(uni_id) from table3 where
exists(select uni_id from table2 where
exists (select id from table1 where EXISTS (select * from table1 where num=5) and num=5)
and id=(select id from table1 where EXISTS (select * from table1 where num=5) and num=5))
Не работает.
Ответы (2 шт):
SELECT
MAX(uniq_id) as max_uniq_id
FROM
table3
WHERE
uniq_id in
(SELECT
uniq_id
FROM
table2
WHERE
id IN
(SELECT
id
FROM
table1
WHERE
num = 5));
P.S.: изменил название столбца у последних двух таблиц - uniq_id, а не uni_id
SET @number := 5;
SELECT t3.uni_id
FROM table1 t1
JOIN table2 t2 USING (id)
JOIN table3 t3 USING (uni_id)
WHERE t1.num = @number
ORDER BY t3.uni_id DESC LIMIT 1;