Получение Родителя Родителя в Самостоятельной Столице Соединения - PullRequest
0 голосов
/ 29 сентября 2010

У меня есть таблица самостоятельного соединения. Эта таблица используется для объединения до 4 уровня, т. Е.;

Region -> Country -> County -> Town

Как я могу получить Parent of Parent of Town. Чтобы сделать это до двух уровней, это запрос

SELECT t.ShortName AS Town,
       (SELECT c.ShortName FROM Locations c 
               WHERE c.LocationId = t.ParentId) AS County
FROM Locations t
WHERE t.LocationId = 100

Теперь хотите получить страну, которая является родителем округа.

Ответы [ 2 ]

2 голосов
/ 29 сентября 2010

Просто представьте 4 отдельные таблицы, используя псевдонимы с красивыми именами:

SELECT town.ShortName as TownName,
       county.ShortName as CountyName,
       country.ShortName as CountryName,
       region.ShortName as RegionName
FROM Locations town
INNER JOIN Locations county  ON town.ParentID = county.LocationID
INNER JOIN Locations country ON county.ParentID = country.LocationID
INNER JOIN Locations region  ON country.ParentID = region.LocationID
WHERE town.LocationID = 100

Если не в каждом городе есть округ, страна и регион, то некоторые из них, возможно, должны быть присоединены к программе LEFT OUTER.

2 голосов
/ 29 сентября 2010

Либо закодируйте другое соединение, либо используйте рекурсивный CTE.

;with locs as
(
select 1 as level, ShortName, ParentId
from Locations 
WHERE LocationId = 100
UNION ALL
SELECT level + 1, l.ShortName, l.ParentId
FROM Locations l 
JOIN locs ON locs.ParentId = l.LocationId
)
SELECT * FROM locs;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...