Выберите из одной таблицы в зависимости от второй таблицы без JOIN

У меня есть две таблицы, которые я могу отлично запросить отдельно.

table1 stores ranges:

SELECT range_id, range_from, range_to FROM table1;

table2 stores IDs:

SELECT MAX(id) FROM table2 WHERE id BETWEEN  AND ;


I need a query that for each tuple (range_id, from, to) from table1 selects the MAX(id) from table2 such that MAX(id) is between from and to:

range_id    max(id)
--------    -------
foo         3
bar         17
snafu       823467

Я не понимаю, как это сделать, потому что здесь нечего ПРИСОЕДИНЯТЬСЯ.

Есть идеи?

2
добавлено отредактировано
Просмотры: 2
nl ja de

2 ответы

select  *
,       (
        select  max(t2.id)
        from    table2 t2
        where   t2.id between t1.range_from and t1.range_to
        ) as max_id_in_range
from    table1 t1
4
добавлено
+1, не знал, что что-то подобное может работать. К сожалению, мой SQL-сервер не работает. Для второго SELECT он сообщает «Синтаксическая ошибка или зарезервированное слово». (Это сервер SQLCI на мэйнфрейме HP NonStop). Есть ли еще один способ?
добавлено автор Philip, источник
Решил его для SQLCI: трюк состоял в том, чтобы имитировать FULL OUTER JOIN с помощью «JOIN <table2> ON 1 = 1», а затем группировать по диапазону_из и range_to, выбирая MAX (id). Поскольку мне нравится ваше решение больше, чем мое (хотя ваш не работает на чертовском SQL/CI), я приму ваш ответ.
добавлено автор Philip, источник

попробуй это

   SELECT t1.range_id ,t2.MAX(id)
   FROM  table1 t1
   INNER JOIN table2 t2
   ON  t1.range_ID = t2.ID
    WHERE t2.id BETWEEN  AND 
0
добавлено
так как он не показывал свою шему, я сказал ему попробовать это.
добавлено автор echo_Me, источник
Из вопроса: «Я не вижу, как это сделать, поскольку здесь нечего ПРИСОЕДИНЯТЬСЯ. « Я не думаю, что range_id из table1 и id из table2 связаны каким-либо образом.
добавлено автор Anthony Grist, источник