2017-06-02 18 views
0

我有一个表[卖方],[广告]和[销售]。左连接,其中为空,也许有count()= 0?

由于我公司的工作方式有些怪异,销售的卖家可以换另一个卖家(让我们称他们为孤儿销售商),但[sale]表更新以反映新的advert.id新的卖家。

我想统计只有ORPHAN SALES的用户的孤儿销售价格。

在得到价格之前,我似乎无法创建一个只有孤儿销售的用户列表。

我试图做一个左加入与哪里是空的,所以我可以得到那些没有销售的广告,然后有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 

但是,我得到的是每个卖家至少有1销售没有销售,但有其他销售广告。

鉴于广告销售的关系是n-> 1,我想正常的连接只是一个左连接,对吧?卖方广告也会发生同样的情况。

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

回答

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 
+0

@MichaelMcGriff是的,它是笛卡尔连接。改变了它。 –

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