Sql Server 2008 Select From table с условиями стиля AND в связанных таблицах - PullRequest
1 голос
/ 26 июля 2010

Учитывая модель как это alt text

ProductFacets содержит следующие данные:

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

Я хотел бы иметь возможность выбрать все продукты, у которых FacetTypeId равен 1 И 2. Набор результатов должен содержать ProductIds 1 и 4

Ответы [ 3 ]

1 голос
/ 27 июля 2010

Это вернет строки для продуктов, которые имеют только типы фасетов 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 голосов
/ 27 июля 2010

Просто подумал, как это сделать:

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)
0 голосов
/ 26 июля 2010
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
)

)

Должен быть лучший способ решить эту проблему, но это единственный, который я могу придумать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...