如何在单个表中实现多行标准

时间:2018-03-26 13:34:25

标签: mysql

mysql> select * from productdetails;
+----------+---------+--------+
| customer | product | is_use |
+----------+---------+--------+
|        1 |       1 |      0 |
|        1 |       2 |      0 |
|        1 |       3 |      1 |
|        2 |       1 |      1 |
|        2 |       2 |      0 |
|        2 |       3 |      1 |
|        3 |       1 |      1 |
|        3 |       2 |      1 |
|        3 |       3 |      1 |
|        4 |       1 |      0 |
|        4 |       2 |      1 |
|        4 |       3 |      1 |
+----------+---------+--------+
12 rows in set (0.00 sec)

如何让客户同时使用上表中的产品1和2

3 个答案:

答案 0 :(得分:1)

为了了解哪些客户同时使用这两种产品,您需要对每位客户进行聚合:

select customer 
from productdetails
group by customer
having sum(product = 1 and is_use = 1) > 0
   and sum(product = 2 and is_use = 1) > 0
;

答案 1 :(得分:1)

使用IN(1,2)的解决方案会找到使用 产品1或产品2(或两者)的客户。

如果您想找到使用 产品1和产品2的客户,您需要同时测试两者。

但WHERE子句自然会在一次只有一行的上下文中应用条件。

所以你需要以某种方式将两行放到一行上。

最好的方法是使用自我加入:

SELECT p1.customer
FROM product_detail AS p1
JOIN product_detail AS p2 ON p1.customer = p2.customer 
WHERE p1.product = 1 AND p1.is_use = 1
  AND p2.product = 2 AND p2.is_use = 1

答案 2 :(得分:0)

您可以使用IN子句:

SELECT customer
FROM   product_detail
WHERE  product IN (1, 2)
AND    is_use = 1;