2017-06-02 20 views
0

私はテーブル[売り手]、[広告]、[売却]を持っています。where joinはnullがあり、count()= 0の可能性がありますか?

私の会社の仕組みが変わっているため、売り手の売り手を別の売り手に変更することができます(孤児の売り手と呼ばせてください)。しかし、[sale]テーブルが更新され、新しい売り手。

私は孤児の売上が唯一のユーザーの孤立した販売の価格を数えたいと思います。

価格を払う前に、孤立した売り上げしかなかったユーザーのリストを作成しているようにも見えません。

私はどこにnullがあるので、私は売り上げのない広告を得ることができる左の結合をしようとしています。

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であるとすれば、通常の結合は左結合であると思いますか?同じことが売り手 - 広告で起こります。

私は間違っていますか?何か案は?あなたはそれ等を呼び出す必要があり、左を必要とする1つ(またはそれ以上)のテーブルに参加する場合は

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

次のない結合構文を試してみて、左孤児

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

@MichaelMcGriffはい、デカルト結合です。それを変更しました。 –

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 
関連する問題