Рекурсивный SQL, который получает первый экземпляр значения в иерархии - PullRequest
0 голосов
/ 22 октября 2018

Я должен сделать это в 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»

Например:

  1. , еслиМеня интересовал Пекхэм, я хотел бы видеть, что Пекхэм не имеет ценности, что Лондон не имеет ценности, что Великобритания не имеет ценности, а Европа - (456).

  2. Если бы я интересовался Лондоном, я бы увидел, что он не имеет никакого значения, равно как и Великобритания, но что Европа это делает (456)

  3. Если бы я интересовался Европой, я бы увидел, что она имеет значение (456)

  4. Если бы меня интересовал Париж, я бы увидел, что он не имеет значения, но Франция делает (123)

Я знаю, что, вероятно, я должен использовать рекурсивные CTE для этого, но я в замешательстве.Любая помощь будет принята!

...