2013-03-08 66 views
1

我有以下MySQL表MySQL的选择statment

OrderId OrderItemId IsReceived 
    1   21   0 
    1   22   1 
    2   31   1 
    2   11   0 
    2   21   0 
    3   31   1 
    3   12   1 
  • 如果IsReceived == 1,表示这个项目被接收。

  • 如果IsReceived == 0,表示此项目尚未收到。

我想知道哪些订单已被完全接收(所有orderItems接收),什么是MySQL查询?

在这种情况下,它会返回一个OrderId:3(因为在orderId 3,收到的所有订单项)

回答

7

这里有一个解决方案:

SELECT OrderId 
FROM `IHaveFollowingMySQLTable` 
GROUP BY OrderID 
HAVING MIN(IsReceived) = 1 
0

而另一

SELECT OrderId 
    FROM OrderItems 
GROUP BY OrderID 
HAVING SUM(IsReceived) = COUNT(IsReceived) 

但@Bill Karwin的答案是最优雅的。

0
select distinct(tbl.OrderId) from your_table_name tbl where tbl.OrderId not in 
(select distinct(tbl2.OrderId) from your_table_name tbl2 where tbl2.IsReceived=0)