2013-07-02 2 views
4

다른 CTE에서 어떻게 CTE를 호출 할 수 있습니까?다른 CTE에서 CTE 하나를 호출하십시오.

WITH cte1 
AS (
    SELECT City.* 
    FROM City 
    WHERE (City.CityName COLLATE SQL_Latin1_General_CP1_CI_AI) LIKE 'são paulo' 
) 
, cte2 
AS (
    SELECT Imovel.Imovel_Id 
    FROM Imovel 
    WHERE Imovel.Number = 311 
    AND Imovel.ZIPCode = '30280490' 
    AND Imovel.Complement = '' 
    AND Imovel.Street = 'Do furquim' 
     -- the line below has an error in cte.City_Id 
    AND Imovel.City_Id = cte1.City_Id 
) 
+1

'FROM' 또는'JOIN' 절에없는 표의 열을 사용할 수 없습니다 ... CTE에 쿼리하려면 'JOIN'해야합니다. – JNK

답변

11

당신은 일반 테이블처럼 모두 가입해야한다 : 내가 CTE의 이후 SELECT * FROM cte2을 추가 한

WITH cte1 
    AS (SELECT city.* 
     FROM city 
     WHERE (city.cityname COLLATE sql_latin1_general_cp1_ci_ai) LIKE 
       'são paulo'), 
    cte2 
    AS (SELECT imovel.imovel_id 
     FROM imovel 
       INNER JOIN cte1 
         ON imovel.city_id = cte1.city_id 
     WHERE imovel.number = 311 
       AND imovel.zipcode = '30280490' 
       AND imovel.complement = '' 
       AND imovel.street = 'Do furquim') 
SELECT * FROM cte2 

주 혼자 "서"수 없습니다.

+1

+1 - 삭제할 때 걱정되었습니다. 그것이 정확하기 때문에! – JNK

+0

그 CTE 중 하나를 재귀 적으로 만들 수 있습니까? cte2를 가정 해 봅시다. 나는 당신의 예제가 재귀적인 것을 의미하지 않는다는 것을 알고 있지만, 다른 CTE에 의존하는 나의 CTE 중 하나에서만 재귀가 필요하다. – FrenkyB

+1

@FrenkyB : 예, 확실합니다 :) –

관련 문제