0

我一直在尝试解决这个 MySQL 问题......问题的一半是我的问题的措辞,如果之前已经解决了,我深表歉意,我做了很多搜索,但无法找到解决方案。

我有两个表,分别称为 orders 和 order_items 每个订单可以包含许多订单项目。

我需要进行搜索以返回仅包含一个订单项目而不包含另一个订单的订单,反之亦然。

为了说明这一点:

表订单

order_id
1
2
3

表 order_items

order_item_id | order_item_type | order_id
1 | 一个 | 1
2 | 一个 | 2
3 | 乙| 2
4 | 乙| 3

我需要做的是获得仅包含项目 A、仅包含项目 B 以及两者的订单。

如您所见,只有项目 A 应该返回订单 1,只有项目 B 应该返回订单 3,并且两者都应该返回订单 2。

尽管我尽了最大的努力,但我什么也做不了。这是目前仅使用 A 项返回订单的尝试

    选择 *
    来自订单
    左外连接 order_items
    ON order_items.order_id = orders.order_id
    在哪里 order_items.order_item_type IN ('A')
    AND order_items.order_item_type 不在('B')
    GROUP BY orders.order_id

有经验的人可能会猜到我的尝试,这会返回订单 1 和订单 2。我认为这可能可以通过子查询来完成,但我相信可以通过正确的连接来完成......只是不知道如何去做吧。谢谢!

4

1 回答 1

0

选择单个 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表格。

于 2012-04-26T16:16:37.317 回答