2014-11-29 4 views
3

Возможно ли, что в SQL используется ссылка внутри выражения Common Table внутри другого C.T.E в том же запросе? Здесь есть пример:SQL - Использовать ссылку CTE для другого CTE

WITH CT1 AS (SELECT * FROM T), 
    CT2 AS (SELECT * FROM CT1) 

SELECT * FROM CT2; 

Я попробовал это в SQLite3, и он работает, я просто хотел бы знать, если это часть стандартного SQL. Любые советы относительно этого аргумента будут высоко оценены. Большое спасибо!

+1

FWIW, он также работает в Postgres, и я не могу придумать ни одной причины, по которой это * не будет * соответствовать стандарту. – IMSoP

+1

Я могу подтвердить, что он будет работать в Postgres, Oracle SQL Server. Вот как это было определено в стандарте SQL. –

+0

Спасибо! Вы знаете, могу ли я определить их в случайном порядке? В этом примере я могу определить ct2 перед ct1? В sqlite3 результат положительный – rickyalbert

ответ

7

Вот три важных свойства КТР:

  • Вы можете обратиться к КТР в последующих КТР или в основной части запроса.

  • Вы можете обратиться к любому данному CTE несколько раз.

  • CTE может использоваться в предложении from на любом уровне вложенности в других подзапросах.

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

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