我一直在努力解决这个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阶段。我认为这可能是通过子查询来完成的,但我相信它可以通过适当的连接来完成...不知道怎么做。谢谢!
答案 0 :(得分:0)
:
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
表。