Комбинированный 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 шт):

Автор решения: Miron
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

→ Ссылка
Автор решения: Akina
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;

fiddle

→ Ссылка