简单来说,我有三个表:Products,ProductsCounties和Counties。我们只能在某些县销售某些产品,因此产品和县与ProductsCounties之间存在多对多的关系。
为了让它变得更简单(因为我在存储过程中使用逗号分隔列表中的拆分字符串...在魔术中),让我们说我只有一个名为WantedCounties的表CountyName& County1,County2和County3作为记录。这基本上是基于我给出的分割字符串函数的结果。我的问题是,我想给三个县(想想WantedCounties将会是我给予的)并且产品必须全部三个而不仅仅一个,因此我的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)
我找到了解决方案here。我不得不包括这个:
GROUP BY --All my refrences
HAVING COUNT(DISTINCT c.CountyName) = (
SELECT CountyName
FROM WantedCounties)
)
这只返回WantedCounties中每个县都有匹配的产品。因此,我的结果中必须有所有3个县与WantedCounties中的3个县相匹配才能说出所有这些县。"