2013-04-03 3 views
1
WITH Extracted_Sessions (a,b) AS 
(
    select a,b from db.tblnm 
) 

Что делает этот SQL? Может кто-нибудь объяснить, пожалуйста?Что такое общее выражение таблицы?

+0

Какой вкус SQL это? –

+0

@joeframbach: выше, на самом деле, стандартный ANSI SQL. –

+0

Посмотрите обычное выражение таблицы или CTE. Это альтернативное имя выражения, которое можно использовать в следующем SELECT. –

ответ

0

Going догадаться, что это общее табличное выражение: это конструкция, которая во многом похожа на временную таблицу:

Используя имя Extracted_Sessions с колоннами a и b вместо запроса select a, b from db.tblnm ... делать вещи на Extracted_Sessions, как будто это была настоящая вещь.

Обычно используется для создания рекурсивных запросов.

+0

спасибо Майк, вы знаете, как работает вышеперечисленный – lucky

+0

Я не понимаю ваш вопрос. Синтаксис (я полагаю, основан на том, действительно ли вы используете MS SQL или нет) CTE, чтобы помочь вам найти дополнительную информацию, но я не знаю, что ваш вопрос или что вы хотите сделать или попробовали , – Mikeb

+0

CTE не является конструкцией «SQL Server». Это ANSI SQL и поддерживается всеми современными СУБД в наши дни (у Oracle и DB2 это было на века). –

2

Это называется «общим табличным выражением». Функция SQL, которая была введена в SQL 99, если я не ошибаюсь.

Он очень похож на производную таблицу. Ваш пример эквивалентен

select a,b 
from (
    select a,b from db.tblnm 
) as Extracted_Sessions 

Основное отличие заключается в том, что вы можете использовать CTE более чем один раз в запросе, в то время как с производной таблицей вам нужно повторить Базовый запрос, каждый раз, например:

WITH Extracted_Sessions (a,b) AS 
(
    select a,b from db.tblnm 
) 
select * 
from Extracted_Sessions e1 
    join Extracted_Sessions e2 on e1.a = e.2b 

(Обратите внимание, что это, вероятно, не имеет смысла, это просто демонстрация того, что вы можете получить доступ к CTE более одного раза).

Postgres руководство имеет хороший учебник по КТР: http://www.postgresql.org/docs/current/static/queries-with.html