2013-03-22 33 views
0

我將簡化這樣的表:MySQL的:選擇訂單隻有當它的所有項目都準備就緒狀態

table order: 
order_id | name 
1   a 
2   b 
3   c 

Table order_item: 
item_id | fk_order_id | status 
1   1    0 
2   1    1 
3   2    1 
4   2    1 
5   3    0 

就緒狀態讓我們說的是1,所以只ORDER_ID = 2擁有所有項目都準備狀態。

如何查詢選擇它?

+0

連接表,並把條件 – 2013-03-22 03:37:21

+0

如果我使用簡單的連接和條件,它不會是足夠的,因爲我必須確保其所有項目都準備好,而不是部分。查詢結果應該是order_id 2,因爲它的item_id 3和4都準備好了 – Ardeus 2013-03-22 03:58:40

回答

0

有這樣做的幾種方法 - 這裏是一個使用COUNT - 獲取所有的COUNT和比較狀態的COUNT = 1:

SELECT fk_order_id 
FROM (
    SELECT fk_order_id, 
    COUNT(1) totCount, 
    COUNT(CASE WHEN Status = 1 THEN 1 END) statusCount 
    FROM Order_Item 
    GROUP BY fk_order_id 
) t 
WHERE totCount = statusCount 

SQL Fiddle Demo

這可以合併到一個查詢中,但我認爲使用子查詢會更好。

0

嘗試這種情況: SELECT ORDER_ID,姓名FROM順序,order_item WHERE order.order_id = order_item.fk_order_id 組由ORDER_ID,具有名稱分鐘(狀態)= 1

相關問題