![](/img/trans.png)
[英]Select all months within given date span, including the ones with 0 values
[英]MySQL - Booking Query - Select All Products That Are Available In A Given Date Span
我有 2 个 mysql 数据库表:产品和预订(忽略不重要的列)
产品
列名 | 列类型 |
---|---|
product_id | INT |
产品名称 | varchar |
预订
列名 | 列类型 |
---|---|
预订编号 | INT |
product_id | INT |
开始日期时间 | 约会时间 |
结束日期时间 | 约会时间 |
我正在使用以下查询来提取可用产品
SELECT
p.product_id,
p.product_name
FROM
product p
WHERE
NOT EXISTS(
SELECT
*
FROM
reservation r
INNER JOIN product p ON p.product_id = r.product_id
WHERE
AND r.start_datetime >= '2021-05-07 00:00:00'
AND r.end_datetime <= '2021-05-07 23:59:59'
)
这最有效,但问题是如果产品预订超过 1 天,该产品就会出现。
例如,产品 A 从2021-05-07 05:00:00 to 2021-05-08 12:00:00
预订。 由于此产品结束日期不在AND r.end_datetime <= '2021-05-07 23:59:59'
内,因此它会显示在查询结果中。 我怎样才能避免这种情况?
我认为你想要的逻辑是:
SELECT p.product_id, p.product_name
FROM product p
WHERE NOT EXISTS (SELECT 1
FROM reservation r
WHERE p.product_id = r.product_id AND
r.end_datetime >= '2021-05-07' AND
r.start_datetime <= '2021-05-08'
);
这将返回所有未在 2021-05-07 期间保留的产品。
注意变化:
JOIN
。 相反,它有一个相关条款。<
更准确。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.