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.