Jointure SQL Problème de "Un à Plusieurs" de la relation

0

La question

J'ai deux tables produit et les réservations, je veux récupérer tous les produits qui ne sont pas inclus dans un intervalle de date, je suis en utilisant une jointure gauche pour atteindre les réserves liées à un produit spécifique, la question est que je dois filtrer par plage de dates, et de retourner tous les produits qui ne sont pas inclus dans cette gamme, il existe plusieurs produits, et dans la plupart des cas, les produits ne sont pas liées à toute réserve, je suis un peu perdu avec ceci:

SELECT
    p.idProduct, p.name, p.description, p.latitude, p.longitude, p.address,
    p.qualification, p.favourite,p.idCategory,p.idCity, p.rules, p.health, p.politics,
    r.idReservation
FROM
    product p 
LEFT JOIN 
    city c ON c.idCity = p.idCity 
LEFT JOIN 
    reservation r ON r.idProduct = p.idProduct 
WHERE
    p.idCity = 1 
    AND ((r.endDate < '2021-11-20' AND r.startDate< '2021-11-28')  
         OR 
         (r.endDate > '2021-11-28' AND r.startDate > '2021-11-20'));

Dans ce cas, par exemple, il n'y a pas de réservations sur ces dates, mais il y a plusieurs produits, qui n'a pas un rapport avec toute réserve.

Un produit qui pourrait être lié à zéro ou plusieurs réserves.

J'apprécierai tout soupçon à ce sujet.

left-join sql
2021-11-22 23:35:16
1

La meilleure réponse

0

SI ce que tu veux dire (c'est pas clair ce que vous avez besoin ou votre logique), c'est que la réservation n'est pas obligatoire, alors vos conditions ne doit pas être obligatoire. Déplacer vers la GAUCHE REJOINDRE

select p.idProduct, p.name, p.description, p.latitude, p.longitude, p.address,
             p.qualification, p.favourite,p.idCategory,p.idCity, p.rules, p.health, p.politics,
             r.idReservation
             from product p 
            LEFT JOIN city c ON c.idCity = p.idCity 
            LEFT JOIN reservation r ON r.idProduct = p.idProduct AND ( 
            (r.endDate < '2021-11-20' AND r.startDate< '2021-11-28') OR 
            (r.endDate > '2021-11-28' AND r.startDate > '2021-11-20') 
            )
            where p.idCity = 1 
            ;
2021-11-22 23:52:56

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................