私は3つのテーブルを持っています。2番目の左のフィルタにジョインする - SQL
表の顧客
CustID, Name
1, Tom
2, Lisa
3, Fred
表製品
CustID, Item
1, Toaster
1, Breadbox
2, Toaster
3, Toaster
表は
を返します:一つは、一つは、彼らが購入した製品や、彼らが行っているリターンの最後の1で構成され、顧客から成りCustID, Date, Reason
1, 2014, Guarantee
2, 2013, Guarantee
2, 2014, Guarantee
3, 2015, Guarantee
Toasterを購入したすべてのお客様に、また、パンを買ったが、商品を2回以上返品した場合は返品しなかった。
だから私は、次のことを試してみました:
SELECT * FROM Customer
LEFT JOIN Product ON Customer.CustID=Product.CustID
LEFT JOIN Returns ON Customer.CustID=Returns.CustID
WHERE Item = 'Toaster'
AND Customer.CustID NOT IN (
Select CustID FROM Product Where Item = 'Breadbox'
)
私のトースターではなくbreadboxを買ってきたものを与えること。したがって、リサとフレッド。
しかし、私はLisaが意図的に製品を分解するのではないかと疑いますので、製品を2回以上返品したものは含めたくありません。したがって、Fredsの情報のみを取得するには、このステートメントに何を追加しますか?およそ
SELECT * FROM Customer
LEFT JOIN Product ON Customer.CustID=Product.CustID
WHERE Item = 'Toaster'
AND Customer.CustID NOT IN (
Select CustID FROM Product Where Item = 'Breadbox'
)
AND (SELECT COUNT(*) FROM Returns WHERE Customer.CustId = Returns.CustID) <= 1
を使用しています。ここをクリックしてください - > http://stackoverflow.com/questions/36293041/select-all-customers-except-if-they-have-another-product-sql –
@SatwikNadkarny同じですが、今では返品条件を追加します –