簡體   English   中英

MySQL正確的一對多關系包括和不包括右表的聯接方法

[英]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

選擇了兩個ord​​er_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM