2016-11-28 79 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个郡相匹配,以便它能够说“这就是他们全部”。

相关问题