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
答案 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;