简体   繁体   中英

How to union 2 left outer join queries?

I want to combine these below 2 queries as one single query.

I have a query for residence that is booked.

SELECT some coluns
FROM residence r 
JOIN project p ON p.ProjectId = r.ProjectId     
LEFT OUTER JOIN residencetype rt ON r.ResidenceTypeId = rt.ResidenceTypeId    
LEFT OUTER JOIN entity_milestone em ON (r.`Status`='BOOKED' AND        em.ResidenceId = r.`ResidenceId`)
 LEFT OUTER JOIN milestone m ON (em.`MilestoneId`=m.MilestoneId)  
 LEFT OUTER JOIN (builder_prospect bp ON r.builderProspectId = bp.id)
 LEFT OUTER JOIN (builder_prospect bp ON r.builderProspectId = bp.id)
 WHERE r.ProjectId =77 AND r.status='BOOKED';

And I have the query for residence that is not booked.

SELECT some coluomns
FROM residence r 
JOIN project p ON p.ProjectId = r.ProjectId  
LEFT OUTER JOIN residencetype rt ON r.ResidenceTypeId = rt.ResidenceTypeId  
LEFT OUTER JOIN entity_milestone em ON (r.`Status`='AVAILABLE' AND     em.ResidenceTypeId=r.ResidenceTypeId) 
LEFT OUTER JOIN milestone m ON (em.MilestoneId=m.MilestoneId) 
LEFT OUTER JOIN builder_prospect bp ON r.builderProspectId = bp.id
WHERE r.ProjectId = 77 AND r.status='AVAILABLE';

How can I combine these queries and make it as one single query?

Use union/union-all . Make sure that the selected some_colums are the same in both the queries in terms of field names and data-types

SELECT some_colums, r.status
FROM residence r JOIN project p ON p.ProjectId = r.ProjectId     
LEFT OUTER JOIN residencetype rt ON r.ResidenceTypeId = rt.ResidenceTypeId    
LEFT OUTER JOIN  LEFT OUTER JOIN entity_milestone em ON (r.`Status`='BOOKED' AND        em.ResidenceId = r.`ResidenceId`)
 LEFT OUTER JOIN milestone m ON (em.`MilestoneId`=m.MilestoneId)  LEFT OUTER JOIN (builder_prospect bp ON r.builderProspectId = bp.id)
 LEFT OUTER JOIN (builder_prospect bp ON r.builderProspectId = bp.id)
 WHERE r.ProjectId =77 AND r.status='BOOKED'
UNION
SELECT some_colums, r.status
FROM residence r JOIN project p ON p.ProjectId = r.ProjectId  
LEFT OUTER JOIN residencetype rt ON r.ResidenceTypeId = rt.ResidenceTypeId  
LEFT OUTER JOIN entity_milestone em ON (r.`Status`='AVAILABLE' AND     em.ResidenceTypeId=r.ResidenceTypeId) 
LEFT OUTER JOIN milestone m ON (em.MilestoneId=m.MilestoneId) 
LEFT OUTER JOIN builder_prospect bp ON r.builderProspectId = bp.id
WHERE r.ProjectId = 77 AND r.status='AVAILABLE';

UPDATE: like this?

SELECT r.*
FROM residence r JOIN project p ON p.ProjectId = r.ProjectId
LEFT OUTER JOIN residencetype rt ON 
     ((r.`Status`='BOOKED' AND em.ResidenceId = r.`ResidenceId`) 
      OR (r.`Status`='AVAILABLE' AND em.ResidenceTypeId=r.ResidenceTypeId))
LEFT OUTER JOIN entity_milestone em ON em.ResidenceTypeId=r.ResidenceTypeId
LEFT OUTER JOIN milestone m ON em.MilestoneId=m.MilestoneId
LEFT OUTER JOIN builder_prospect bp ON r.builderProspectId = bp.id
WHERE r.ProjectId = 77 AND (r.status = 'AVAILABLE' or r.status = 'BOOKED')

UPDATE2: Sorry, r.status in (...) will not work!

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM