【问题标题】:SQL query to get a result based on count of records in other tableSQL查询以根据其他表中的记录数获取结果
【发布时间】:2015-10-01 19:05:16
【问题描述】:

我在 MySQL DB 中有 3 个表:ordersitemsitem_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

我需要从 items 表中选择一个 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

【问题讨论】:

  • 所以你只想在不存在某种顺序的情况下选择一个项目。你尝试了什么?你在哪里失败了?
  • 你的最终结果应该是什么?
  • 在我的示例中,我的最终结果应该是 item_id,它的名称中没有 order_status=0 的订单 - 所以在这种情况下,我希望结果为 2(满足该要求的 item_id)
  • @Viceromag:你有没有尝试过任何事情并被卡住了,或者你只是想让别人为你工作?你得到我的提示了吗?
  • @Thorsten Kettner 是的,我得到了你的提示,我正在尝试这样的事情 - SELECT ei.item_id from items ei LEFT JOIN items_to_orders eio ON ei.item_id=eio.item_id where not exists (select * 来自订单 o 其中 o.order_id = eio.order_id 和 o.order_status=0) ORDER BY ei.item_id LIMIT 1

标签: mysql sql


【解决方案1】:

你的方法已经很好了。 EXISTS 是要走的路。只有您不想看到不存在特定订单类型的item/order 组合,而是items。所以你必须把items_to_orders放在子查询里面,所以你从items中选择不存在的订单类型。

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

【讨论】:

    【解决方案2】:

    试试这个查询

     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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 2016-04-05
      • 1970-01-01
      相关资源
      最近更新 更多