2013-11-29 2 views
2

아래 테이블에 하나 이상의 임시 테이블을 추가하여 동일한 테이블과 조인하는 방법.임시 테이블 2 개로 결합

WITH financial_move_out_due_days AS ( 
    SELECT property_id, 
     management_company_id, 
     value 
    FROM property_preferences 
    WHERE property_id IN (112,332) AND management_company_id = 23 
    ) 
    SELECT 
     l.id, 
     l.primary_customer_id, 
     (c.name_first || c.name_last) AS customer_name_full, 
     c.email_address AS customer_email_address, 
     c.phone_number AS phone_number 
    FROM leases l 
    JOIN customers c ON (c.management_company_id = l.management_company_id AND c.id = l.primary_customer_id) 
    JOIN financial_move_out_due_days fmpodd ON (fmpodd.management_company_id = l.management_company_id AND fmpodd.property_id = l.property_id) 
    WHERE 
     l.management_company_id = 23 
     AND l.property_unit_id IS NOT NULL 
     AND l.unit_space_id IS NOT NULL'; 
+1

을 당신이 CTE가 아닌 임시 테이블을 의미 생각합니다. CTE는 temoporary 테이블보다보기에 가깝습니다. 모든 정직에서는 대개 불필요하지만 통사론적인 설탕을 사용합니다. 읽기가 쉽지만 일반적으로 더 복잡한 SQL을 사용하여 수행 할 수있는 작업은 없습니다. 복잡한 SQL을 조각으로 나눕니다. @ realnumber3012 님이 귀하의 질문에 답변했습니다. 그 또는 더 세부 사항이 필요하면 알려주십시오. –

+0

예. PGSQL을 처음 접했을 때 나는 CTE에 대해 몰랐습니다. –

+1

'동일한 항목으로 연결 '하려면 하나의 CTE를 두 번만 사용할 수 있습니다. 귀하의 질문을 명확히하십시오. –

답변

2

다음과 같이하십시오 :

WITH financial_move_out_due_days AS 
    ( 
     SELECT property_id, 
      management_company_id, 
      value 
     FROM property_preferences 
     WHERE property_id IN (112,332) AND management_company_id = 23 
    ), 
    another_financial_move_out_due_days AS 
    ( 
     SELECT property_id, 
      management_company_id, 
      value 
     FROM property_preferences 
     WHERE property_id IN (112,332) AND management_company_id = 23 
    ) 
    SELECT 
     l.id, 
     l.primary_customer_id, 
     (c.name_first || c.name_last) AS customer_name_full, 
     c.email_address AS customer_email_address, 
     c.phone_number AS phone_number 
    FROM leases l 
    JOIN customers c ON (c.management_company_id = l.management_company_id AND c.id = l.primary_customer_id) 
    JOIN financial_move_out_due_days fmpodd ON (fmpodd.management_company_id = l.management_company_id AND fmpodd.property_id = l.property_id) 
    JOIN another_financial_move_out_due_days fmpodd ON (fmpodd.management_company_id = l.management_company_id AND fmpodd.property_id = l.property_id) 
    WHERE 
     l.management_company_id = 23 
     AND l.property_unit_id IS NOT NULL 
     AND l.unit_space_id IS NOT NULL';