Самостоятельное соединение с вложенным запросом выбора в T-SQL - PullRequest
1 голос
/ 14 февраля 2011

Возможно ли объединить вложенный оператор выбора с собой (не выписывая его дважды и не выполняя дважды)

Нечто подобное было бы идеально

SELECT P.Child, P.Parent, Q.Parent AS GrandParent
FROM (SELECT Child, Parent FROM something-complex) AS P
LEFT JOIN P AS Q ON Q.Child = P.Parent

Ответы [ 2 ]

4 голосов
/ 14 февраля 2011

50% возможно.Вы можете использовать CTE, чтобы избежать записи его дважды, но он все равно будет выполняться дважды.

;WITH p
     AS (SELECT child,
                parent
         FROM   something-complex)
SELECT p.child,
       p.parent,
       q.parent AS grandparent
FROM   p
       LEFT JOIN p AS q
         ON q.child = p.parent  

Если запрос дорогой, вам потребуется материализовать его в переменную таблицы или таблицу #temp, чтобы избежатьобъединение, вызывающее два вызова базового запроса.

2 голосов
/ 14 февраля 2011

Вы можете использовать общее табличное выражение:

WITH P AS (SELECT Child, Parent FROM something-complex)
SELECT P.Child, P.Parent, Q.Parent as GrandParent
LEFT JOIN P AS Q ON Q.Child = P.Parent
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...