【发布时间】:2017-10-23 09:04:53
【问题描述】:
我有三张桌子:
- 产品项
- 订单项
- 订单
这些表具有以下关联:
OrderItem 属于 Order。
OrderItem 属于 ProductItem。
Order OrderItem -> ProductItem
订单表有一个delivery_date 和一个pick_up_date 列。
我想获取在特定时间范围内没有订单的ProductItems。
我用这个查询尝试过,但它仍然返回 ProductItems,如果它们过去或将来有 Orders:
SELECT
"product_items".*,
"orders".*
FROM
"product_items"
LEFT OUTER JOIN
"order_items" ON "order_items"."product_item_id" = "product_items"."id"
LEFT OUTER JOIN
"orders" ON "orders"."id" = "order_items"."order_id"
WHERE
(
'2017-10-24' < orders.delivery_date OR
orders.pick_up_date < '2017-10-23' OR
orders.id IS NULL
)
该查询的问题在于它排除了在此特定时间范围内的产品项目。但是,由于产品项目可以在多个订单中,这将不起作用,因为在指定时间范围内不可用的相同产品项目可能在不在此时间范围内的其他订单中。所以他们仍然被退回。
有没有办法只获取特定时间范围内的产品项目并排除存在订单的所有产品项目?
类似这样的:
SELECT ALL PRODUCT ITEMS THAT HAVE NO ORDERS BETWEEN DELIVERY DATE AND PICK UP DATE
我使用 Postgres 作为数据库引擎。
我添加了一个 SQLFiddle 示例 here。
我从 6 个小时开始就一直在处理这个问题。感谢您的每一次帮助。
【问题讨论】:
-
请添加示例数据
标签: sql postgresql