我有三张桌子:
表格具有以下关联:
<script type="text/javascript" src="/node_modules/angular/angular.min.js"></script>
<script type="text/javascript" src="js/controllers/WorkersController.js"></script>
属于OrderItem
。
Order
属于OrderItem
。
ProductItem
&lt; - Order
- &gt; 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
)
我使用Postgres作为数据库引擎。
我添加了一个SQLFiddle示例here。
我现在6个小时就坐在这个问题上了。感谢每一位帮助。
答案 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 %}