#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