SQL查询根据其他表中的记录计数获取结果

时间:2015-10-01 10:03:08

标签: mysql sql

我在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

2 个答案:

答案 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
);