Mysql 查找具有两个条件的匹配列的所有行
我有两个表,我想找出哪些订单在line_items表中有两行,以及其中一行的sku是BALL。基本上,无论球行的数量是多少,都要找到只订购了一个球的所有客户。每个订单至少需要有两行,因为其中一行将始终用于装运sku 在下面的数据中,john和sam将是唯一返回的有效订单,因为他们的订单在line_items表中的唯一SKU是BALL和SHIPPING(不考虑BALL数量)。我希望合并这些表,以便返回的数据具有订单id、客户、放置日期和数量Mysql 查找具有两个条件的匹配列的所有行,mysql,Mysql,我有两个表,我想找出哪些订单在line_items表中有两行,以及其中一行的sku是BALL。基本上,无论球行的数量是多少,都要找到只订购了一个球的所有客户。每个订单至少需要有两行,因为其中一行将始终用于装运sku 在下面的数据中,john和sam将是唯一返回的有效订单,因为他们的订单在line_items表中的唯一SKU是BALL和SHIPPING(不考虑BALL数量)。我希望合并这些表,以便返回的数据具有订单id、客户、放置日期和数量 TABLE orders id customer
TABLE orders
id customer date_placed
===========================
0 john 1/1/2000
1 bill 2/1/2000
2 sam 2/5/2000
TABLE line_items
id order_id qty sku
=========================
0 0 1 BALL
1 0 1 SHIPPING
2 1 1 BALL
3 1 1 ROPE
4 1 1 SHIPPING
5 2 3 BALL
6 2 1 SHIPPING
非常感谢你 如果我理解正确,你应该可以这样写:
SELECT o.id, customer, date_placed, li.qty
FROM orders o
INNER JOIN line_items li
ON o.id=li.order_id AND li.sku='BALL'
WHERE EXISTS(
SELECT order_id
FROM line_items tli
WHERE o.id=tli.order_id
GROUP BY order_id
HAVING count(*)=2)
谢谢,我已经走了这么远。但我无法克服的一点是,它仅限于只有SKU和发货的订单。这意味着john和sam是可以的,但是bill不应该被退回(您的示例确实会退回),因为他的订单包含SKU球、绳索和装运。好的。我误解了。我已经更新了答案,只包括有2行项目的订单。