我想找到没有我传递的日期范围的产品(它将是一个参数)。我能够写这个查询,但是它是有限的,因为它不考虑带有以前的“签入”或稍后的“签出”的预订。
你能帮帮我吗?
SELECT *
FROM bookings b
right join products p ON b.product_id = p.id
WHERE b.check_in_date >= '2022-11-10' AND NOT b.check_out_date <= '2022-11-25';输出将是所有的产品,没有任何预订日期在范围内。

发布于 2022-09-06 23:26:40
我发这篇文章是为了回答这个问题,因为我不能发表评论,但是我想说:
SELECT *
FROM bookings b
right join products p ON b.product_id = p.id
WHERE NOT (b.check_in_date >= '2022-11-10' AND b.check_out_date <= '2022-11-25');这样就得到了所有不在范围内的预订?
注:这相当于:
...WHERE b.check_in_date < '2022-11-10' OR b.check_out_date > '2022-11-25'发布于 2022-09-07 12:12:54
你从预订中得到了数据,但你说你想要产品。所以,我会这样做:
SELECT * FROM products p
JOIN bookings b ON b.product_id = p.id
WHERE b.productId NOT IN
(SELECT bo.productId FROM bookings bo
WHERE bo.check_in_date >= '2022-11-10'
AND b.check_out_date <='2022-11-25');没有测试过,但至少应该给你一个思考的方法。
https://stackoverflow.com/questions/73627168
复制相似问题