У меня есть таблица города каквыбрать, если матч поля или, если матч ребенок запись поля
(Id, Name, ParentId)
где ParentId является Id из города (самостоятельно, связанные таблицы)
Я хочу, чтобы получить города Wheres ParentID равна нулю (корень) если имя совпадает или имя ребенка запись соответствует я написал
declare @cities table (Id, Name, ParentId)
insert into @cities (Id , Name)
select Id , Name from Cities
Where CHARINDEX(N'CD', Name) > 0 and ParentId is null
insert into @cities (Id , Name)
select Id , Name from Cities
Where Id in
(select distinct ParentId from Cities
where CHARINDEX(N'CD', Name) > 0 ParentId is not null)
and ParentId is null
select distinct * from @cities
Что я могу сделать, чтобы сделать это быстрее и лучше?
Edit:
Id | Name | ParentId
----------------------
1 | ABCD | NULL
----------------------
2 | EFZX | NULL
----------------------
3 | GHIJ | NULL
----------------------
4 | MNOP | 1
----------------------
5 | CDKL | 2
----------------------
6 | QRST | 3
----------------------
это должно вернуться:
Id | Name | ParentId
----------------------
1 | ABCD | NULL
----------------------
2 | EFZX | NULL
----------------------
Edit2:
первые выберите возвращает города с соответствующими именами
второй выберите возвратов города с соответствующими детьми
затем объединить два результата.
Добавить некоторые данные испытаний и ожидаемые результаты. –
@GiorgiNakeuri Сделано! – Star
, пожалуйста, объясните, как вы получите этот результат. я не могу понять это –