我有一个桌子卖家,广告和销售。
由于我的公司的工作方式中的一个怪癖,销售的销售者可以改变为另一个销售者(我们称之为孤立销售),但是销售表被更新以反映来自新销售者的新的advert.id。
我想计算一下只有孤立销售的用户的孤立销售的价格。
在有价格之前,我甚至不能创建一个只有孤立销售的用户列表。
我正在尝试与where is null做一个左连接,这样我就可以得到那些没有销售额的广告,然后一个having 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然而,我得到的是每一个卖家,有至少一个销售没有销售,但有其他广告与销售。
假设advert-sale关系是n->1,我猜一个普通的join只是一个左join,对吧?同样的事情也发生在卖家-广告上。
我做错了什么?有什么想法吗?
发布于 2017-06-03 00:18:07
在不使用join语法的情况下尝试以下操作:
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发布于 2017-06-03 00:18:51
如果您需要在一个(或多个)表上使用左连接,则必须将其命名为
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发布于 2017-06-03 00:32:59
在看到你的查询后,我认为下面的查询会给你提供接受的输出。
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) = 0https://stackoverflow.com/questions/44333206
复制相似问题