2015-10-01 120 views
0

的記錄數我在MySQL數據庫3個表:訂單項目item_to_orders。最後一個表item_to_orders通過item_id和order_id索引將訂單和商品關聯起來。SQL查詢來獲取結果基於其他表

訂單:

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_id from items表,即無訂單order_status = 0分配給它item_to_order表。它可以有任何其他訂單(其中order_status!= 0)分配給它或根本沒有訂單。我試圖使用這個查詢,但它似乎並沒有給我所有正確的結果(我添加了LIMIT,因爲我只需要這種類型的項目)。

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

你最終的結果是什麼? –

+0

在我的例子中,我的最終結果應該是item_id,它的名字沒有order_status = 0的訂單 - 所以在這種情況下,我希望結果是2(滿足該要求的item_id) – Viceromag

回答

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