Я должен сделать это в SQL.
У меня есть таблица с названием 'location'.Он содержит список мест, от домов, улиц, городов до континентов.
locationId | name | desiredValue
1 | Wimbledon |
2 | Peckham |
3 | London |
4 | UK |
5 | France | 123
6 | Europe | 456
7 | Australia |
8 | Paris |
У меня есть вторая таблица 'links', которая содержит ссылку местоположений, и их отношение
Location1 | Location2 | Linktype
3 | 1 | 5
3 | 2 | 5
4 | 3 | 5
6 | 4 | 5
5 | 8 | 5
linktype 5 указывает, что location2 расположен 'in' location1.В приведенном выше примере locationId 1 (Уимблдон) расположен «in» locationId 3 (Лондон).LocationId 3 (Лондон) расположен в inI locationId 4 (Европа) и т. Д.
Тип ссылки только что описывает это отношение in - таблица ссылок также содержит другие отношения, которые не относятся к этому вопросу.Я просто упоминаю это в случае, если это должно быть в предложении where.
Для заданного местоположения я хочу получить первый экземпляр в его иерархии местоположений, который имеет значение «requiredValue»
Например:
, еслиМеня интересовал Пекхэм, я хотел бы видеть, что Пекхэм не имеет ценности, что Лондон не имеет ценности, что Великобритания не имеет ценности, а Европа - (456).
Если бы я интересовался Лондоном, я бы увидел, что он не имеет никакого значения, равно как и Великобритания, но что Европа это делает (456)
Если бы я интересовался Европой, я бы увидел, что она имеет значение (456)
Если бы меня интересовал Париж, я бы увидел, что он не имеет значения, но Франция делает (123)
Я знаю, что, вероятно, я должен использовать рекурсивные CTE для этого, но я в замешательстве.Любая помощь будет принята!