Возвращает значение между диапазоном и использует результаты для сравнения с другой таблицей без внешнего ключа

#sql #postgresql #join

#sql #postgresql #Присоединиться

Вопрос:

Будучи абсолютным новичком в postgres, я работаю над случаем, когда у меня есть таблица с именем range_results , содержащая:

 lower| upper | result
1    | 10    | abc
11   | 20    | def
21   | 30    | ghi
... 
n 10 | n 10  | xyz
  

Затем у меня есть таблица с именем codes , которая имеет единственное поле данных с именем numbers , буквально содержащее числа, которые могут быть любыми из значений в ссылочном наборе (либо точно нижними, верхними, либо промежуточными). Итак, именно из range_results таблицы я хотел бы вернуть соответствующее значение numbers из codes таблицы, используя эти ссылочные значения при попадании…

Мое затруднительное положение заключается в том, что я не могу выполнить что-то вроде приведенного ниже запроса из-за того, что нет отношения FK (я полагаю), поскольку я получаю серьезную ошибку «более одной строки, возвращаемой подзапросом, используемым в качестве выражения» при запуске запроса. Изначально я думал, что буду использовать left join . Но все же это должно иметь отношение…

 select result from range_results
where lower >= (select numbers from codes)
and upper <= (select numbers from codes)
  

Я на правильном пути? Можно ли вообще спасти этот существующий запрос?

Ответ №1:

Одним из методов является left join :

 select n.number, rr.*
from numbers n left  join
     range_results rr
     on rr.number >= rr.lower and rr.number <= rr.upper