2012-10-24 2 views
2

가 여기 내 데이터 샘플입니다 : 나는 "사과"를 검색 그래서 만약MySQL 쿼리 - 세 테이블이 연결된 두 번째 테이블에서 외래 키 발생 수를 계산하는 방법은 무엇입니까?

 
product 
-------------------------------- 
| product_id PK | product_name | 
-------------------------------- 
| FRT1   | Apple  | 
| FRT2   | Orange  | 
| TXT1   | Ribbon  | 
-------------------------------- 

package 
------------------------- 
| package_id PK | price | 
------------------------- 
| P001   | 1000 | 
| P002   | 1500 | 
| P003   | 1000 | 
------------------------- 

package_detail 
--------------------------------- 
| package_id FK | product_id FK | 
--------------------------------- 
| P001   | FRT1   | 
| P002   | FRT1   | 
| P002   | FRT2   | 
| P003   | FRT2   | 
--------------------------------- 

검색을위한 열쇠는 제품 _가있다, 그 결과는 다음과 같이해야합니다 :

 
------------------------------------------- 
| package_id | price | num_of_package_dtl | 
------------------------------------------- 
| P001  | 1000 | 1     | 
| P002  | 1500 | 2     | 
------------------------------------------- 

내가 할 수있는, 가입에 약 해요 누구든지 그 질문에 나를 도와 주겠습니까? 페이지의 패키지 페이지에 가입 package_detail의 PD에서 num_of_package_dtl로

선택 pd.package_id, p.price, COUNT (*) : 이 ~ 사전에이 같은

답변

3
SELECT b.package_id, c.price, d.totalCount 
FROM product a 
     INNER JOIN package_detail b 
      ON a.product_ID = b.product_ID 
     INNER JOIN package c 
      ON b.package_ID = c.package_ID 
     INNER JOIN 
     (
      SELECT package_id, COUNT(*) totalCount 
      FROM package_detail 
      GROUP BY package_id 
     ) d ON d.package_ID = b.package_ID 
WHERE a.product_name = 'apple' 

SQLFiddle Demo

+0

정말 고마워요. 속이 세 번 @@, 내 두뇌가 처리 할 수 ​​없습니다. 나는이 질의를 깨고 공부할 것이다. 다시 한 번 감사드립니다. –

0

뭔가를 주셔서 감사합니다. package_id = pd.package_id 제품 pt를 pt.product_id = pd.product_id에 pd.product_name = 'Apple'그룹으로 pd.package_id, p.price로

+0

"package_detail pd"에 "product_name"필드가 없습니다. "pd.product_name"을 "pt.product_name"으로 변경하려고 시도했습니다. 결과는 내가 원했던 것이 아니며 "Apple"이 있고 모든 수가 "1"인 모든 패키지를 보여줍니다. –

+0

어떤 결과를 기대합니까? 각 가격에 대해 하나의 계산이 내 결과 세트가 주어진 것으로 보입니다. – Darren

+0

내 결과에 2 이상의 개수가 포함될 수 있으며 개수는 가격이 아닌 각 패키지의 제품에 대한 것입니다. 내 샘플에서 볼 수 있듯이 첫 번째 행 계산 결과는 1이고 두 번째 행은 1이 아니라 2입니다. John Woo의 대답을 사용하여 예상 한 결과를 얻었습니다. 답변 해 주셔서 감사합니다. @ 대런 네 일러 –

관련 문제