我有3张桌子。客户、销售和potential_sales。
基本结构如下:
客户表:
+-----------+-------+----------------+ | client_id | name | address | +-----------+-------+----------------+ | 1 | john | 12 blue ave | | 2 | paul | 34 green lane | | 3 | peter | 69 yellow road | +-----------+-------+----------------+
潜在销售表:
+----------+------------+---------------------+ |product_id | client_id | received_free_promo | +-----------+------------+---------------------+ | 3 | 1 | 1 | | 4 | 2 | 0 | | 5 | 2 | 1 | +-----------+------------+---------------------+
销售量:
+----------+-----------+-----------+ | sales_id | client_id | product_id | +----------+-----------+------------+ | 1 | 2 | 4 | | 2 | 43 | 4 | | 3 | 2 | 5 | | 4 | 18 | 93 | +----------+-----------+------------+
我想加入客户和潜在销售表,仅当
1)收到
的促销等于 1 和2)他们实际购买了促销包(即潜在销售的 product_id 有一个进入销售表的条目)。如果他们最终没有购买 free_promo 产品,那么我根本不想加入 clients 和 potential_sales 表。这很重要 - 我不能简单JOIN
地弄清楚,因为这只是更大查询的一小部分,我不能无缘无故地加入。
(这是我希望它的工作方式。主要是描述我想要发生的事情的伪代码) SELECT c.* FROM clients c LEFT JOIN potential_sales ps ON ps.client_id=c.id LEFT JOIN sales ps ON s.product_id=ps.product_id IF(s.sales_id) JOIN potential_sales ps ON ps.client_id=c.id
我如何在 MySQL 中执行此操作?我还没有接近解决方案。请帮忙!
试试这个:
SELECT A.*, B.product_id, B.received_free_promo
FROM Clients A JOIN
(SELECT * FROM PotentialSales
WHERE received_free_promo=1) B
ON A.client_id=B.client_id
WHERE EXISTS (SELECT 1 FROM Sales C
WHERE A.client_id=C.client_id
AND B.product_id=C.product_id);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句