2010-04-02 3 views
1

보이는 것보다 더 어려운 것으로 판명 된 문제를 해결하려고 노력 중입니다.속성 목록이있는 제품 찾기

이 속성을 가진 제품을 연결하는 테이블이 고려, 그것은 다음과 같습니다

 
Products_id | Attribute_id 
    21  |  456 
    21  |  231 
    21  |  26 
    22  |  456 
    22  |  26 
    22  |  116 
    23  |  116 
    23  |  231 

다음, 나는 모든이 제품을 얻기 위해 사용하려는 attribute_ids의 목록을 가지고 그 목록에있는 속성들.

예를 들어이 목록 (456, 26)을 사용하여 위 표를 검색하면이 product_ids 21과 22를 얻어야합니다. 또 다른 예로, (116, 231)을 검색하면 제품 23은 두 속성을 모두 가지고있는 유일한 것입니다.

어떻게 하나의 쿼리를 사용하여이 작업을 수행 할 수 있습니까?

나는 나의 질문을 분명히하기를 희망한다.

감사합니다.

+2

> (116, 231)을 검색하면 빈 응답이 표시됩니다. 23 일, 빈 응답이 아닐까요? – glebm

+0

glebm을 지적 주셔서 감사합니다, 나는 그것을 고쳤다. – b2238488

답변

1
select product_id from products 
where attribute_id in (123,234) 
group by product_id having count(*) = 2 
+0

귀하의 전제 조건이 뚜렷하지 않다면 먼저 표를 구별하고 싶습니다. – tpdi

+0

@ tpdi : 이유가 무엇입니까? 그룹화는 그렇게하며 테이블에 고유 한 행이 있다고 가정하는 것이 합리적입니다. –

3

당신이 당신의 쿼리 공예에게 손 경우

SELECT Products_ID 
    FROM ProductAttributes 
WHERE Attribute_ID IN (116, 231) 
GROUP BY Products_ID 
HAVING COUNT(*) = 2; 

이 지정된 속성 항목의 수 속성의 수와 같다 모든 제품을 요청합니다. 일반화하려는 경우 관심있는 제품 속성 ID 값의 테이블을 조인합니다.

+0

의미가 있고 작동해야합니다. 감사합니다. – b2238488

0
select products_id from table where attribute_id = 456 
intersect 
select products_id from table where attribute_id = 26; 
+0

mySQL (버전 5.1.33)에서 "intersect"를 인식하지 못했습니다. – JYelton