类别_销售
| 类别id|客户ID|销售|
| --|--|--|
| 203 | 1 | 2325 |
| 15 | 2 | 847 |
品牌_销售
| 品牌标识|客户ID|销售|
| --|--|--|
| 108 | 1 | 2001 |
| 20 | 2 | 89 |
product_sales
| 产品ID|客户ID|销售|
| --|--|--|
| 112 | 1 | 1900 |
| 12 | 1 | 150 |
| 124 | 2 | 1091 |
SELECT id
FROM customers
WHERE
id IN (SELECT customer_id FROM category_sales WHERE category_id IN (...))
AND id NOT IN (SELECT customer_id FROM brand_sales WHERE brand_id IN (...))
AND id NOT IN (SELECT customer_id FROM product_sales WHERE product_id IN (...))
我正在尝试获取购买或未购买某些品牌、产品和类别的客户ID列表。上面的查询没有按预期工作,因为结果列表中仍然有购买了某些品牌或产品的客户,这些客户本应被查询过滤掉。
我第一次尝试加入三个销售表与客户表-没有工作。然后我尝试使用EXISTS和NOT EXISTS来代替普通的WHERE条件-不起作用。还尝试使用OR而不是AND-不起作用。我错过了什么?
我使用的mysql版本是5.7.12,因此不能使用CTE。
1条答案
按热度按时间nzk0hqpo1#
我不确定这个说法
我正在尝试获取购买或未购买某些品牌、产品和类别的客户ID列表。
但是,我假设你想得到列出的客户ID列表,但没有购买某些品牌,产品和类别。
有了以上的假设,你在查询中的错误只出现在第一个条件上。您的查询应该是这样的:
为了使它更具可读性,我将使用
LEFT JOIN
对其进行更改。下面是示例代码: