mysql - 获取在同一订单中购买了三件指定商品的所有客户

标签 mysql sql

我有一个如下的 customer_orders 表,我想检索以同一订单购买商品 'x','y','z' 的所有客户。只是想知道如何实现这个问题的解决方案。

输入数据:-

CREATE TABLE customer_orders
(
  customer_id INTEGER,
  order_id INTEGER,
  item_id INTEGER,
  ORDER_QTY INTEGER,
  PRICE INTEGER,
  ORDER_DATE DATE
 ); 

 INSERT INTO customer_orders VALUES(101,901,1,50,10,'2015-07-15'); 
 INSERT INTO customer_orders VALUES(101,901,2,20,50,'2015-07-15');
 INSERT INTO customer_orders VALUES(101,901,3,40,30,'2015-07-15'); 
 INSERT INTO customer_orders VALUES(102,902,2,30,15,'2015-04-16');
 INSERT INTO customer_orders VALUES(102,902,3,20,20,'2015-04-16');
 INSERT INTO customer_orders VALUES(103,903,1,50,10,'2014-05-17'); 
 INSERT INTO customer_orders VALUES(102,904,3,100,20,'2014-08-18'); 
 INSERT INTO customer_orders VALUES(101,905,2,200,15,'2014-09-19'); 
 INSERT INTO customer_orders VALUES(104,906,3,70,20,'2015-10-18'); 
 INSERT INTO customer_orders VALUES(104,906,2,30,15,'2015-10-18'); 
 INSERT INTO customer_orders VALUES(104,906,1,40,10,'2015-10-18'); 
 INSERT INTO customer_orders VALUES(105,907,2,80,15,'2014-03-29'); 
 INSERT INTO customer_orders VALUES(104,908,2,90,15,'2014-05-19'); 

输出:-

101
104

Assumption :- Item x --> 1, Item y ---> 2, Item z --> 3

最佳答案

您的解决方案实际上并没有解决问题。您还需要按订单对结果进行分组,以免混淆不同订单中的订购商品,然后检索唯一的客户:

SELECT DISTINCT 
         customer_id
FROM     customer_orders
WHERE    item_id BETWEEN 1 AND 3
GROUP BY customer_id, order_id
HAVING   COUNT( DISTINCT item_id ) = 3

例如,如果您从用户101的一个订单中删除列表(1,2,3)(例如:下面)中的一项,则在您的解决方案仍然会在输出中限定用户 101,因为他以不同的顺序订购了商品 2。这种行为将使您的方法失去资格。

-- INSERT INTO customer_orders VALUES(101,901,2,20,50,'2015-07-15');

查看修改后的SQL Fiddle查看我提到的问题。

关于mysql - 获取在同一订单中购买了三件指定商品的所有客户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39550663/

相关文章:

sql - Firebird:为什么这个sql语句在存在记录时找不到记录?

php - MySQL 子查询重用

MySQL 查询取决于列值定义 where 语句

mysql - 使用 ADO.RecordSet 对象从 VBA 运行选择查询不返回完整结果

php - laravel 使用其关系 ID 获取 Eloquent 数据

mysql - 如何过滤具有 DISTINCT 和多个结果的 sql 请求

php - Laravel 在学校活跃时对用户进行身份验证

mysql - 删除 field1 和 field2 相同的重复项

sql - 如何将值插入到 sql server 2000、2005、2008 中的表中?

SQL 区分大小写的字符串与 like 和 "="的比较