У меня есть таблица под названием ranges
, которая выглядит как this-SQL - как выбрать строки на основе значений из другой таблицы?
create table ranges(low bigint, high bigint, id int);
insert into ranges values (10,20,100);
insert into ranges values (21,30,101);
Я еще одну таблицу, которая выглядит как this-
create table ip(ip bigint);
insert into ip values (12);
Я хочу запрос, который будет выводить id
из ranges
таблица, если ip
от ip
таблица находится между low
ииз ranges
стол.
Например, для ф 12
, я хочу выход быть -
12,100
так 12
находится между низким и высоким 10
20
из ranges
таблицы. Каков наиболее эффективный способ сделать это? столбец ip
не существует в таблице ranges
, поэтому я не могу выполнить прямое соединение.
Хотя он работает, на RedShift он очень медленный. Я получаю предупреждение: «Вложенная петля Присоединиться к плану запроса - просмотрите предикаты соединения, чтобы избежать декартовых произведений» – user375868
Правильно, соединение, подобное этому, не рекомендуется в большой таблице. В качестве альтернативы, если в диапазонах есть регулярный интервал. Вы можете округлить свой 'ip.ip' до ближайшей базы интервала и сделать' JOIN'. – ydoow