#sql
Вопрос:
У меня есть таблица, называемая ссылками, в которой есть такие столбцы, как:
depname, refname, reftype.
Где refname-это имя таблицы, зависящее от представления.
В этом случае я хочу, чтобы все представления прямо или косвенно зависели от таблиц, содержащих «сапфир» в их названии.
Я не уверен, как двигаться дальше, и связать косвенные зависимости с представлениями, которые косвенно зависят от этого. Любая помощь была бы очень признательна!
Комментарии:
1. Это всегда приветствуется примерные данные и ожидаемый результат
2. Моя вина! Добавляю 🙂
3. Пожалуйста, предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.
Ответ №1:
В нескольких словах, используя sql server (вы не пометили свою СУБД), вы можете сделать это следующим образом:
declare @objName varchar(100) = 'Saphire'
;with sample as (
select 'V1' as vw, 'Saphire' as obj, 'Table' as objt union all
select 'V2' as vw, 'V1' as obj, 'View' as objt union all
select 'V3' as vw, 'V2' as obj, 'View' as objt
),
cte as (
select vw, obj, objt from sample where obj = @objName -- anchor member
union all
-- recursive member
select s.vw, s.obj, s.objt
from sample s
join cte c
on c.vw = s.obj
)
select * from cte
Вы можете протестировать на этой скрипке db<>
CTE ведет себя совершенно особым образом по сравнению с поведением обычных sql-запросов. CTE использует элемент привязки и рекурсивный элемент в определении CTE. Это помогает получить иерархии внутри таблицы.
Комментарии:
1. @zlata_x, я не очень хорошо понимаю, чего ты хочешь. Вот почему я рекомендовал вам добавить ожидаемый результат. Как вы можете видеть в его ответе, мне пришлось изобрести ваши данные только для того, чтобы показать вам поведение рекурсивного CTE
2. @zlata_x это всего лишь вопрос псевдонима на выходе, вы можете проверить это на этой скрипке => > dbfiddle.uk/…
3. Мой ответ возвращает именно ваш ожидаемый результат. Я настоятельно рекомендую вам остановиться и подумать о том, что вы спрашиваете, и переформулировать свой вопрос, добавив свой тег СУБД, примеры данных и ожидаемый результат. Пожалуйста, помогите нам помочь.