2016-11-28 33 views
0

以簡化的方式,我有三個表:Products,ProductsCounties和Counties。我們只能在某些縣份銷售某些產品,因此產品縣與產品縣之間存在多對多的關係。爲了讓問題變得更簡單(因爲我在存儲過程中使用逗號分隔列表中的拆分字符串......魔法之間),假設我只有一個名爲WantedCounties的表,其中包含CountyName的County1,County2,和縣3作爲記錄。這基本上是基於我給它的分割字符串函數的結果。我的問題是,我想給三個縣(認爲WantedCounties將成爲我所給的),並且產品必須在所有三個中都可用,而不僅僅是一個,因此爲什麼我的IN語句在這裏失敗。對於多對多的SQL語句WHERE Item IN所有結果,而不僅僅是一個

SELECT DISTINCT p.* FROM Products p 
JOIN ProductsCounties pc ON pc.ProductId = p.ProductId 
JOIN Counties c ON pc.CountyId = c.CountyId 
WHERE c.CountyName IN (SELECT CountyName FROM WantedCounties) 

這就像我可以縮小我的問題,使其容易問。有誰知道如何做到這一點?我只想要與每個縣都有關係的產品,而不僅僅是子查詢中的一個匹配項。

我認爲我的問題是我無法掌握如何處理由於每個縣連接匹配選擇多行。

我也嘗試了一些沿着= ALL (SELECT CountyName FROM WantedCounties)行無果。

編輯:我找到了解決方案here。我必須包括這樣的:

GROUP BY --All my refrences 
HAVING COUNT(DISTINCT c.CountyName) = (
SELECT CountyName 
FROM WantedCounties) 
) 

是在每一個縣WantedCounties比賽這隻回報產品。因此,我的結果中必須有3個縣與WantedCounties中的3個郡相匹配,以便它能夠說「這就是他們全部」。

+0

什麼是你的'產品'表?您只在「產品」表上執行「區分」功能,因此您不會在結果列表中看到「國家/地區」。那麼你怎麼知道你的查詢是錯誤的? –

+0

我已經添加了縣名並已經看到它是錯誤的。我只是在那裏顯示每個產品需要1行,而不是每個產品/縣的組合。 – justiceorjustus

+0

'將'WantedCountries'加入'CountryName'上的'Countries'表。並刪除Where子句。 –

回答

0

我找到了解決方案here。我必須包括:

GROUP BY --All my refrences 
HAVING COUNT(DISTINCT c.CountyName) = (
SELECT CountyName 
FROM WantedCounties) 
) 

這隻會返回WantedCounties中每個縣都有匹配的產品。因此,我的結果中必須有3個縣與WantedCounties中的3個郡相匹配,以便它能夠說「這就是他們全部」。

相關問題