2010-08-15 6 views
20
category_product 
--------------- 
id_category 
id_product 

product 
--------------- 
id_product 
id_manufacturer 

manufacturer 
--------------- 
id_manufacturer 
name 

id_category와 일치 할 때 제조업체의 모든 이름을 선택하도록 SQL 쿼리를 만드는 방법은 무엇입니까?SQL을 많이 선택하십시오.

SELECT m.* 
FROM  category_product cp INNER JOIN 
      product p ON cp.id_product = p.id_product INNER JOIN 
      manufacturer m ON p.id_manufacturer = m.id_manufacturer 
WHERE  cp.id_category = <your_value> 
+1

비슷한 질문을 이 작업을 수행 할 수있는 방법이 많이 있음) : [필트 방법 r SQL은 has-many-through 관계에있다.] (http://stackoverflow.com/questions/7364969/how-to-filter-sql-results-in-a-has-many-through-relation) – Bukov

답변

0

시도 뭔가 그것은 테이블의 간단한 내부 조인 것 :

SELECT m.name, cp.id_category 
FROM manufacturer as m 
INNER JOIN product as p 
    ON m.id_manufacturer = p.id_manufacturer 
INNER JOIN category_product as cp 
    ON p.id_product = cp.id_product 
WHERE cp.id_category = 'some value' 
9

검색어없는 다음과 같이됩니다 조인 (

SELECT m.name 
FROM manufacturer as m, product as p, category_product as cp 
WHERE cp.id_category = <your value> 
     AND cp.id_product = p.id_product 
     AND p.id_manufacturer = m.id_manufacturer 
2
Select M.name 
From manufacturer M 
Where M.id_manufacturer in (Select P.id_manufacturer 
           From product P 
           Where P.id_product in (Select C.id_product 
                 From category_product C 
                 Where C.id_category = ?)) 
+0

나는 알고있다. 이것은 다른 접근법처럼 보이지만 대형 테이블이 주어지면 이러한 쿼리의 성능은 * 끔찍할 것입니다. ... –

+1

아니요, 하위 쿼리의 90 %가 합류보다 우수합니다 –

+3

그리고 증명 사례 (사례 연구, 링크) 이 진술의 엑스-) –

관련 문제