2013-11-29 98 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更像是一個視圖,而不是一張臨時表,並且在所有的誠實中通常是不必要的,但只是語法糖 - 它更容易閱讀,但它通常不會做任何你可以用更復雜的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';