我在MySQL数据库中有3个表:订单,项目和 item_to_orders 。最后一个表item_to_orders通过item_id和order_id索引将订单和项目联系在一起。
订单
order_id order_name order_status
1 Test 0
2 Test2 1
项目:
item_id item_name
1 item1
2 item2
item_to_order
order_id item_id
1 1
2 2
我需要从 item 表中选择一个 item_id ,该表没有在 item_to_order中为 order_status = 0 分配的订单表。它可以有任何其他订单(其中order_status!= 0)分配给它或根本没有订单。
更新:我试图使用此查询,但似乎它并没有给我所有正确的结果(我添加了LIMIT,因为我只需要1种此类项目)
SELECT ei.item_id from items ei
LEFT JOIN items_to_orders eio ON ei.item_id=eio.item_id
WHERE NOT EXISTS
(select * from orders o where o.order_id = eio.order_id and o.order_status=0)
ORDER BY ei.item_id LIMIT 1
答案 0 :(得分:0)
尝试此查询
SELECT i.item_id, i.item_name
FROM order o
JOIN item_to_order ir ON(ir.order_id = o.order_id)
JOIN items i ON(i.item_id =ir.item_id)
WHERE o.order_status!=0
GROUP BY i.item_id
答案 1 :(得分:0)
你接近已经很好了。 EXISTS
是要走的路。只有您不希望看到不存在特定订单类型的商品/订单组合,但商品。因此,您必须将items_to_orders
放在子查询中,以便从项中选择不存在订单类型的内容。
select item_id
from items i
where not exists
(
select *
from items_to_orders ito
join orders o on o.order_id = ito.order_id
where ito.item_id = i.item_id
and o.order_status = 0
);