2015-09-21 3 views
1

В недавнем проекте SQL Server 2008 R2 я столкнулся с множеством запросов, в которых были внешние имена Select with Field, которые точно совпадали с именами полей из Select Statement в нем. Затем - после последней скобки вокруг внутреннего запроса - было предложение where.Причины выбора из заявления о выборе?

E.g. [Псевдокод]

Select Field1, Field2, Field3 
From 
(
Select Field1, Field2, Field3 
From Table1 
Inner Join Table2 ON . . . multiple joins . . . 
) As A 
Where Field 1 = SomeValue AND Field 2 <> SomeOtherValue 

Есть ли польза для обертывания внутреннего Выберите заявление во внешнем заявлении Выберите, а не просто добавление ИНЕК к концу внутреннего оператора SELECT?

Я должен добавить, что некоторые из полей во внутреннем Select состоят из Case Casements. .

CASE 
    WHEN Year(tbl.[somedate]) = #### THEN NULL 
    ELSE tbl.[someotherdate] 
END AS Field2 

Спасибо!

+1

Возможно, в более ранней версии, возможно, был UNION ALL. –

+2

Взгляните на этот ответ, демонстрирующий поля псевдонимов в производной таблице. http://stackoverflow.com/questions/2654750/multiple-aggregate-functions-in-one-sql-query-from-the-same-table-using-differen/2654867#2654867 – Jeremy

+0

Если кто-то создал внутренний запрос, и вы не хотел возиться с ним, это хороший способ обернуть его. – ergonaut

ответ

0

В этом случае предложение WHERE не может ссылаться на Feild2 (основанный на case case). Вложенность запроса может быть вызвана тем, что она уже была оценена. Предложение WHERE не может видеть псевдонимы, поэтому вам нужно будет повторить оператор CASE в предложении WHERE.

Я по-прежнему предпочитаю CTE или другие варианты лично.

Смежные вопросы