Использование общего табличного выражения для простого выбора - PullRequest
3 голосов
/ 09 июня 2011

В нашем проекте я заметил следующее использование Common Table Expression для простого выбора из представления:

WITH CTE_View_Alias AS
(
  SELECT 
    Id,
    Column1,
    Column2
  FROM VW_View
),
CTE_Foo AS
(
  SELECT
    B.Bar_Id,
    V.Column1
  FROM VW_Bar B
  INNER JOIN CTE_View_Alias V
    ON B.View_Id = V.Id
)

CTE используется только в одном другом месте, другом CTE. Столбцы в CTE являются подмножеством столбцов представления.

Есть ли польза от этого? Почему бы не напрямую ссылаться на мнение? К сожалению, создатель этих SQL-заявлений больше не с компанией. Для меня это снижает читабельность, но я не хочу устранять это, если есть причина, по которой моя неопытность мешает мне видеть.

1 Ответ

2 голосов
/ 09 июня 2011

Нет никакой разницы между:

WITH CTE_View_Alias AS (
 SELECT v.id,
        v.column1,
        v.column2
   FROM VW_View v)
SELECT t.*
  FROM CTE_View_Alias t

... и:

SELECT v.id,
       v.column1,
       v.column2
  FROM VW_View v

Возможно, представление не является необходимым, но это не вопрос ...

Нет никакой разницы в производительности между ранее упомянутыми параметрами и производной таблицей:

 SELECT x.*
   FROM (SELECT v.id,
                v.column1,
                v.column2
           FROM VW_View v) x

CTE является синтаксическим сахаром для производной таблицы, , если не используетсярекурсивная функциональность .

Заключение

Вам нужно будет спросить автора, почему он решил использовать CTE.Возможно, были удалены более сложные операции, и CTE был оставлен как есть в страхе сломать что-то непредвиденное.Или это просто функциональность, которую они хотели использовать ...

Я всегда боюсь, что подобные вопросы слишком абстрагированы / упрощены, чтобы демонстрировать решения.

...