繁体   English   中英

SQL Join Issue 一对多关系

[英]SQL Join Issue One to Many relationship

我有两个表产品和预订,我想检索不包含在日期范围内的所有产品,我正在使用左连接来达到特定产品的相关预订,问题是我必须过滤日期范围,并返回所有未包含在该范围内的产品,有几种产品,并且在大多数情况下,这些产品与任何预订无关,我对此有点迷茫:

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') 
            );

例如,在这种情况下,这些日期没有预订,但是有多个产品与任何预订都没有关系。

一种产品可能与零个或多个预订相关。

我会很感激任何关于它的提示。

如果您的意思是(不清楚您需要什么或您的逻辑)是预订不是强制性的,那么您的条件不必是强制性的。 将它们移动到 LEFT JOIN

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 
            ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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