У меня есть требование разрешить поиск по имени (начинается с). В этом поиске будут возвращены все элементы, которые начинаются с букв (букв) и всех родителей, которые содержат дочерние элементы, начинающиеся с этих букв.Поиск для возврата как дочерних элементов, так и родительских элементов
Образец данных прилагается с моей попыткой сделать это. Есть ли лучший способ сделать это? Заранее большое спасибо.
declare @A table (ID int ,
Name varchar(100),
ParentID int)
INSERT INTO @A Values (1, 'Apples', 10)
INSERT INTO @A Values (2, 'Bananas', 20)
INSERT INTO @A Values (3, 'Mangos ', 30)
INSERT INTO @A Values (4, 'Avocados ', 10)
INSERT INTO @A Values (5, 'Blueberries ', 20)
INSERT INTO @A Values (6, 'Blackberries ', 20)
INSERT INTO @A Values (7, 'Apricots ', 10)
INSERT INTO @A Values (10, 'Fruits beginning with A ', 0)
INSERT INTO @A Values (20, 'Fruits beginning with B ', 0)
INSERT INTO @A Values (30, 'Fruits beginning with C ', 0)
-- when searching for A should find Apples, Avocados, Apricots
-- and 'Fruits beginning with A' (ie their parent).
DECLARE @Letter varchar (10) = 'A%'
select id, name, ParentID from @a
where name like @Letter
UNION
select id, name,parentID from @a
where ID in (select distinct ParentID from @a
where name like @Letter)
Спасибо! это работает для моих выборочных данных, но на моей реальной жизненной таблице рецептурных препаратов она длится долго. Мне нужно будет выполнить фактический план выполнения, чтобы увидеть, отсутствует ли какой-либо индекс. – Daisy