【发布时间】:2021-05-05 16:11:45
【问题描述】:
我有 2 个 mysql 数据库表:Product & Reservation(忽略不重要的列)
产品
| Column Name | Column Type |
|---|---|
| product_id | INT |
| product_name | varchar |
预订
| Column Name | Column Type |
|---|---|
| reservation_id | INT |
| product_id | INT |
| start_datetime | datetime |
| end_datetime | datetime |
我正在使用以下查询来提取可用产品
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' 范围内,因此它会显示在查询结果中。我怎样才能避免这种情况?
【问题讨论】:
-
只标记你真正使用的数据库,好像是MySQL。