CTE를 실행할 때 CTE를 참조하는 힌트는 CTE가 쿼리의 뷰를 참조하는 힌트와 동일한 방식으로 기본 테이블에 액세스할 때 검색되는 다른 힌트와 충돌할 수 있습니다. 이 경우 쿼리는 오류를 반환합니다. PostgreSQL 데이터베이스는 이점에서 다릅니다: 쿼리와 서로 독립적인 기본 문으로 각각 을 최적화합니다. 동일한 이름의 마스크 기존 테이블또는 뷰를 사용하여 정의된 쿼리 이름.5 코딩 오류가 수정된 후 MAXRECURSION은 더 이상 필요하지 않습니다. 다음 예제에서는 수정된 코드를 보여 주며, 이 예제에서는 수정된 코드가 표시됩니다. 공통 테이블 식(CTE)이라고 하는 임시 명명된 결과 집합을 지정합니다. 이는 간단한 쿼리에서 파생되며 단일 SELECT, INSERT, UPDATE, DELETE 또는 MERGE 문의 실행 범위 내에서 정의됩니다. 이 절은 SELECT 정의 문의 일부로 CREATE VIEW 문에서도 사용할 수 있습니다. 공통 테이블 식에는 자체에 대한 참조가 포함될 수 있습니다. 이를 재귀 공통 테이블 식이라고 합니다.
위의 예제와 마찬가지로 쿼리 내에서 필요한 만큼 원하는 수의 WITH 절을 사용할 수 있습니다. 위의 동일한 예는 WITH 절 내에서 하위 쿼리로 사용되는 복잡한 SQL 쿼리 문을 가질 수도 있음을 보여줍니다. 다음 예제에서는 관리자와 관리자에게 보고하는 직원의 계층 적 목록을 보여 주었습니다. 예제는 dbo를 만들고 채우는 것으로 시작합니다. MyEmployees 테이블입니다. SQL:1999는 “문 범위 보기”를 정의하는 with 절을 추가했습니다. 데이터베이스 스키마에는 저장되지 않고, 대신 에 속한 쿼리에서만 유효합니다. 이렇게 하면 전역 네임스페이스를 오염하지 않고 명령문의 구조를 개선할 수 있습니다.
CTE의 재귀 부분에 있는 분석 및 집계 함수는 현재 재귀 수준에 대한 집합에 적용되며 CTE에 대한 집합에는 적용되지 않습니다. ROW_NUMBER와 같은 함수는 현재 재귀 수준에 의해 전달되는 데이터의 하위 집합에서만 작동하며 CTE의 재귀 부분에 전달되는 전체 데이터 집합은 작동하지 않습니다. 자세한 내용은 다음에 있는 재귀 CTE에서 분석 함수 사용 K. 예제를 참조하십시오. 문서화되지 않은 기능입니다. 전역 임시 테이블을 사용하는 예제를 제공했지만 그렇지 않은 다른 상황이 있을 수 있습니다. 다음은 SQL 쿼리 내에서 여러 WITH 절을 사용하는 방법의 예입니다. 쿼리가 이름이 같은 여러 열을 반환하거나 재귀 키워드가 지정된 경우 열 이름은 필수입니다(SQL:2016-2, §7.17, 구문 규칙 3ji). 보시다시피 SELECT 문과 함께 WITH 절을 사용할 수 있을 뿐만 아니라 INSERT, DELETE, ALTER 및 기본적으로 다른 SQL 문을 사용할 수 있는 다른 문에서도 사용할 수 있습니다. 의 기본 기능은 잘 지원됩니다.
제품이 다르게 행동하는 단일 영역은 이름 확인입니다. 특히 재귀로 처리되는 경우가 많다는 점은 주목할 만합니다.6 보다 미묘한 비호환성은 정규화된 테이블 이름과 관련이 있습니다(schema.table은 쿼리를 참조할 수 없음)7 및 쿼리 범위에서 사용되는 뷰(뷰 내부의 쿼리는 외부를 “참조”하지 않음).8 SQL SELECT 문은 조건을 지정하는 절(예: FROM 및 WHERE)에 따라 데이터베이스 테이블에서 레코드를 검색합니다. 구문은 다음과 같습니다: sp_prepare에서 준비한 문에서 사용되는 경우 CT는 PDW의 다른 SELECT 문과 동일한 방식으로 행동합니다. 그러나 sp_prepare에서 준비한 CETAS의 일부로 CTE를 사용하는 경우 sp_prepare에 바인딩이 구현되는 방식으로 인해 SQL Server 및 기타 PDW 문에서 동작이 연기될 수 있습니다. CTE에 존재하지 않는 잘못된 열을 참조하는 SELECT 를 사용하는 경우 sp_prepare는 오류를 감지하지 않고 통과하지만 sp_execute 중에 오류가 throw됩니다.