2010-07-26 15 views
1

包含以下数据:SQL Server 2008中选择表和作风状况鉴于这样 <img src="https://i.imgur.com/6TO87.png" alt="alt text"></p> <p>ProductFacets模型相关的表

ProductId, FacetTypeId 
1, 1 
1, 2 
2, 1 
2, 3 
3, 4 
3, 5 
4, 1 
4, 2 

我希望能够选择所有其具有的1和2 一个FacetTypeId产品的结果集应包含ProductIds 1和4

+0

为什么/ 2应该不包括在结果集中的1,4? (请注意ProductID,FacetTypeID为2,1) – 2010-07-26 17:35:57

+0

FacetTypeId必须是1和4(可能有1,4和2的产品怎么样) – 2010-07-26 17:44:58

+0

可以把它想象成一个过滤器,我们只希望带有BOTH FacetTypeId 1和2的产品。 – 2010-07-26 19:02:03

回答

1

这将返回仅包含方面类型1和2的产品的行,并且仅包含那些方面。

SELECT ProductId, 
    COUNT(*) AS FacetCountByProduct, 
    SUM(CASE WHEN FacetTypeId in (1, 2) THEN 1 ELSE 0 END) AS FacetCountSelectedFacets 
FROM ProductFacets 
GROUP BY ProductId 
HAVING COUNT(*) = 2 
    and SUM(CASE WHEN FacetTypeId in (1, 2) THEN 1 ELSE 0 END) = 2 
; 
0
SELECT * FROM Product PROD WHERE PROD.ProductId IN(

SELECT P.ProductId pId FROM ProductFacets AS P 
WHERE P.FacetTypeId = 1 

AND EXISTS 
(
    SELECT * 
    FROM ProductFacets AS P1 
    WHERE P1.FacetTypeid = 2 
     AND P1.ProductId = pId 
) 

AND NOT EXISTS 
(
    SELECT * 
    FROM ProductFacets AS P2 
    WHERE P2.FacetTypeid NOT IN (1,2) 
     AND P2.ProductId = pId 
) 

) 

有亩st是一个更好的方法来解决这个问题,但它是唯一一个我可以想出的

0

只是想到了一个办法做到这一点:

select distinct ProductId from ProductFacets 
where ProductId in (select ProductId from ProductFacets where FacetTypeId = 1) 
and ProductId in (select ProductId from ProductFacets where FacetTypeId = 2) 
相关问题