left join where null,可能有count()= 0?

时间:2017-06-02 16:07:42

标签: mysql left-join having

我有一张桌子[卖家],[广告]和[销售]。

由于我公司的工作方式很奇怪,销售的卖家可以换另一个卖家(我们称之为孤儿销售),但[销售]表格会更新以反映新的广告。来自新卖家。

我想计算只有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,我猜一个正常的连接只是一个左连接,对吧?卖家广告也是如此。

我做错了什么?有任何想法吗?

3 个答案:

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