Sql 与2个临时表联接
如何在下面的查询中再创建一个临时表,以便与相同的表联接Sql 与2个临时表联接,sql,postgresql,Sql,Postgresql,如何在下面的查询中再创建一个临时表,以便与相同的表联接 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 ) S
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';
试着这样做:
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';
试着这样做:
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';
我相信你的意思可能是CTE,而不是临时桌子。CTE更像是一个视图,而不是一个临时表,老实说,它通常是不必要的,但只是语法上的糖分——它更容易阅读,但它通常不会做任何你可以用更复杂的sql做的事情——只是将复杂的sql分解成碎片@realnumber3012已经回答了您的问题。如果你需要更多的细节,请告诉他或我。我不知道CTE,因为我是PGSQL新手。要使用相同的
连接,只需使用一个CTE两次即可。请澄清您的问题。我从@realmumber3012和ramesh获得了解决方案。我相信您的意思可能是CTE,而不是临时表。CTE更像是一个视图,而不是一个临时表,老实说,它通常是不必要的,但只是语法上的糖分——它更容易阅读,但它通常不会做任何你可以用更复杂的sql做的事情——只是将复杂的sql分解成碎片@realnumber3012已经回答了您的问题。如果你需要更多的细节,请告诉他或我。我不知道CTE,因为我是PGSQL新手。要使用相同的连接,只需使用一个CTE两次即可。请澄清你的问题。我从@realnumber3012和ramesh那里得到了答案。