[英]MySQL proper join method for one-to-many relationship including and excluding right table
我一直在嘗試解決這個MySQL問題...問題的一半是我的問題,如果在此之前已經解決,我深感抱歉,我做了很多搜索,但找不到解決方案。
我有兩個表,分別稱為orders和order_items。每個訂單可以包含許多訂單項。
我需要進行搜索,以返回僅包含一個訂單項而不包含另一個訂單項的訂單,反之亦然。
為了說明這一點:
表訂單
order_id 1 2 3
表order_items
order_item_id | order_item_type | order_id 1 | A | 1 2 | A | 2 3 | B | 2 4 | B | 3
我需要做的是獲取僅包含項目A,僅包含項目B以及兩者都包含的訂單。
如您所見,只有項目A應該返回訂單1,只有項目B應該返回訂單3,並且兩者都應該返回訂單2。
盡管我盡了最大的努力,但我什么也做不了。 這是目前僅退還項目A的訂單的嘗試
SELECT * FROM orders LEFT OUTER JOIN order_items ON order_items.order_id = orders.order_id WHERE order_items.order_item_type IN ('A') AND order_items.order_item_type NOT IN ('B') GROUP BY orders.order_id
作為有經驗的人可能會猜一下我的嘗試,這將同時返回順序1和順序2。我認為可以通過子查詢來完成,但是我相信可以通過適當的聯接來完成...只是不確定如何去做吧。 謝謝!
當選擇單個order_item時:
SELECT i.* FROM order_items i
WHERE i.order_item_type = 'A' AND
(SELECT COUNT(order_id) FROM order_items WHERE order_id = i.order_id) = 1
選擇了兩個order_item:
SELECT i.* FROM order_items i
WHERE i.order_item_type IN ('A', 'B') AND
(SELECT COUNT(order_id) FROM order_items WHERE order_id = i.order_id) = 2
並根據需要加入orders
表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.