/ / Comment joindre 2 les requêtes de jointure externe gauche? - mysql

Comment unir 2 des requêtes de jointure externe gauche? - mysql

Je veux combiner ces 2 requêtes ci-dessous en une seule requête.

J'ai une requête de résidence qui est réservée.

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";

Et j'ai la requête pour la résidence qui n'est pas réservée.

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";

Comment puis-je combiner ces requêtes et en faire une seule requête?

Réponses:

0 pour la réponse № 1

Utilisation union / union-all. Assurez-vous que les some_colums sélectionnés sont les mêmes dans les deux requêtes en termes de noms de champs et de types de données

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";

-1 pour la réponse № 2

METTRE À JOUR: comme ça?

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: Pardon, r.status in (...) ne fonctionnera pas!