Объединение таблиц, где атрибуты совпадают в диапазоне - PullRequest
0 голосов
/ 26 июня 2018

Здравствуйте. У меня есть запрос, который я хочу настроить для базы данных, которая включает в себя элементы, затраты и вес.

Скажем, таблица для элементов с соответствующими весами выглядит следующим образом: ItemWeight

NAME      Weight
--------  -------
item1     250
item2     1600
item3     2200

И еще одна таблица для затрат предметов, которые находятся в диапазоне веса, который выглядит следующим образом CostPerWeight

Weight    Cost
--------  ------
2500      6.00
2000      5.75
1500      5.00
1000      3.00
500       2.00

Итак, результирующая таблица, которую я хочу иметь, это та, с которойпредмет, его вес и его стоимость.

Пока я собрал все вместе:

SELECT I.NAME, I.weight, C.cost
FROM ItemWeight I 
JOIN CostPerWeight C ON I.Weight <= C.Weight

Но проблема в том, что, скажем, вес 265 должен составлять 2,00, потому чтоэто меньше 500, но это также меньше 1500, что составляет 5,00, поэтому мне просто нужна помощь, чтобы найти способ проверить, находится ли атрибут в диапазоне другого атрибута, чтобы получить желаемый результат.Спасибо за любую помощь, спасибо!

Ответы [ 2 ]

0 голосов
/ 26 июня 2018

Вам необходимо найти правильную строку в таблице cost:

select i.*, c.cost
  from ItemWeight i
  left join CostPerWeight c on c.weight =
    (select min(d.weight) from CostPerWeight d where d.weight >= i.weight)

Кроме того, вы не определяете, что произойдет, если элемент имеет вес больше 2500. Для ясности вТаблица CostPerWeight переименует столбец weight в up_to_weight.

0 голосов
/ 26 июня 2018

Одним из решений будет агрегирование:

SELECT I.NAME, I.Weight, MIN(C.Cost) AS Cost
FROM ItemWeight I 
JOIN CostPerWeight C ON I.Weight <= C.Weight
GROUP BY I.NAME, I.Weight;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...