У меня есть предопределенный список целочисленных диапазонов, например, 16 ... 32, 24 ... 40 и т. Д.
Каждая строка в таблице имеет один из этих диапазонов в одном столбце current
. Также должен быть столбец accepted
со списком диапазонов. Оба столбца никак не связаны напрямую.
Цель - когда у меня есть строка A с, например. current = 16...32
Я хочу найти все остальные строки, где accepted
включает указанный диапазон c current
. В идеале, сделайте это как часть того же запроса.
В моем наивном подходе у меня была бы отдельная таблица с этими диапазонами, идентифицированными с помощью идентификатора, а затем ссылка на него. Но видя, насколько надежен Postgres, я все время задавался вопросом, есть ли более простой способ.
Уточнение
Я бы сделал это так, но он кажется слишком громоздким. Предлагает ли Postgres что-то более лаконичное?
CREATE TABLE "ranges" (
id integer
min integer -- just for clarity
max integer -- isn't considered for querying
)
CREATE TABLE "users" (
id integer
currentRangeId integer -- references ranges
)
CREATE TABLE "userRanges" (
userId integer -- references users
rangeId integer -- references ranges
)
В большинстве случаев у меня будет userId
на входе, мне нужно найти его currentRangeId
, а затем на выходе я ожидаю список других userId
где rangeId = currentRangeId
.