Объедините две или более таблиц, когда вы не знаете количество объединяемых таблиц
-
22-08-2019 - |
Вопрос
Я работаю с MS SQL 2005.Я определил древовидную структуру как:
1
|\
2 3
/|\
4 5 6
Я создал SQL-функцию Subs (id), которая получает идентификатор и возвращает таблицу поддерева.Таким образом, Subs (3) вернет 4 строки с 3,4,5,6, в то время как Subs (2) вернет одну строку с 2.
У меня есть оператор select, который возвращает указанные выше идентификаторы (соединяя это дерево с другими таблицами)
Я хочу после оператора select, который возвращает указанные выше идентификаторы
(в результате получится таблица, содержащая, например, 2 строки:)
2
3
чтобы иметь возможность запускать вспомогательную функцию как
Subs(2)
union
Subs(3).
(Результатом должны быть строки с идентификатором 2,3,4,5,6)
Проблема в том, что я не знаю, как передавать аргументы, и я не знаю, как динамично использовать union.
Возможно ли решить это на этом уровне, или я должен перенести это на верхний уровень (C #)?
Решение
Я не думаю, что вам нужно ОБЪЕДИНЕНИЕ здесь, с SQL Server 2005 вы можете достичь желаемого результата, используя ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ:
select
f.*
from
resultsTable rt
cross apply dbo.subs(rt.ID) f
Это предполагает, что результирующая таблица - это та, в которой хранятся результаты вашего первого запроса, а имя поля - ID
Другие советы
Я думаю, вы хотите почитать о Рекурсивные Общие Табличные выражения.