我有一张桌子[卖家],[广告]和[销售]。
由于我公司的工作方式很奇怪,销售的卖家可以换另一个卖家(我们称之为孤儿销售),但[销售]表格会更新以反映新的广告。来自新卖家。
我想计算只有ORPHAN SALES的用户的孤儿销售价格。
在付出代价之前,我甚至无法创建只有孤儿销售的用户列表。
我正在尝试使用where为null的左连接,这样我就可以获得那些没有销售的广告,然后有一个count()= 0,这样我就可以得到那些没有销售的用户。
SELECT seller.id
FROM seller
JOIN advert ON advert.seller_id = seller.id
JOIN sale orphan ON advert.id = orphan.advert_id
JOIN sale accomplished_sale ON advert.id = accomplished_sale.advert_id
WHERE orphan.id IS NULL
GROUP BY seller.id
HAVING count(accomplished_sale.id) = 0
然而,我得到的是每个卖家至少有一次没有销售的销售,但其他广告有销售。
鉴于广告销售的关系是n-> 1,我猜一个正常的连接只是一个左连接,对吧?卖家广告也是如此。
我做错了什么?有任何想法吗?
答案 0 :(得分:0)
在没有连接语法的情况下尝试以下操作:
SELECT seller.id
FROM seller, sale, advert
WHERE advert.seller_id = seller.id
AND advert.id = sale.advert_id
AND sale.id IS NULL
GROUP BY seller.id
HAVING count(accomplished_sale.id) = 0
答案 1 :(得分:0)
如果您需要在一个(或多个)表格上进行左连接,您必须将其称为例如:对于左派连续销售为孤儿
SELECT seller.id
FROM seller
INNER JOIN advert ON advert.seller_id = seller.id
LEFT JOIN sale orphan ON advert.id = orphan.advert_id
INNER JOIN sale accomplished_sale ON advert.id = accomplished_sale.advert_id
WHERE orphan.id IS NULL
GROUP BY seller.id
HAVING ifnull(count(accomplished_sale.id), 0) = 0
答案 2 :(得分:0)
看到你的查询后,我认为下面的查询会给你接受的输出。
SELECT distinct seller.id
FROM seller
JOIN advert ON advert.seller_id = seller.id
JOIN sale orphan ON advert.id = orphan.advert_id
JOIN sale accomplished_sale ON advert.id = accomplished_sale.advert_id
WHERE orphan.id IS NULL
HAVING count(accomplished_sale.id) = 0