Объедините две или более таблиц, когда вы не знаете количество объединяемых таблиц

StackOverflow https://stackoverflow.com/questions/700950

Вопрос

Я работаю с 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

Другие советы

Я думаю, вы хотите почитать о Рекурсивные Общие Табличные выражения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top