显示特定时间范围内没有特定订单的产品项目

时间:2017-10-23 09:04:54

标签: sql postgresql

我有三张桌子:

  • ProductItems
  • 的OrderItems
  • 订单

表格具有以下关联:

<script type="text/javascript" src="/node_modules/angular/angular.min.js"></script> <script type="text/javascript" src="js/controllers/WorkersController.js"></script> 属于OrderItemOrder属于OrderItem

ProductItem&lt; - Order - &gt; OrderItem

订单表包含ProductItemdelivery_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
        )

我使用Postgres作为数据库引擎。

我添加了一个SQLFiddle示例here

我现在6个小时就坐在这个问题上了。感谢每一位帮助。

3 个答案:

答案 0 :(得分:0)

left join而非where

中添加时间范围条件

类似这样的事情

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
AND ( '2017-10-24' < orders.delivery_date
    OR orders.pick_up_date < '2017-10-23' )
WHERE orders.id IS NULL

答案 1 :(得分:0)

如果您可以提供一些示例数据,以便我可以重新创建数据库并进行一些测试,我很乐意提供更准确的解决方案。
同时,试一试

SELECT
"product_items".*,
"orders".*
FROM
    "product_items"
    INNER JOIN
        "order_items" ON "order_items"."product_item_id" = "product_items"."id"
    INNER JOIN
        "orders" ON "orders"."id" = "order_items"."order_id"
WHERE
    (
        product_items.id not in (orders_items.product_item_id) AND
        (whatevertimeframe you'd want)
    )

答案 2 :(得分:0)

试试这个

    {% extends "index.html.twig" %}

{% block section %}
<table class="table table-hover table-condensed"><thead>
<tr><th>Name</th><th>Logo</th><th>Cat</th><th>Time</th><th>Players</th></tr>
</thead><tbody>
{% for game in game%}


      <tr><td>{{game.name}}</td><td>{{game.logo}}</td><td>{{game.cat}}</td><td>{{game.time}}</td><td>{{game.player}}</td><td>
</tr>
{% endfor %}
</tbody></table>
{% endblock %}