2012-10-24 46 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   | 
--------------------------------- 

用於搜索的關鍵是PRODUCT_NAME,所以如果我搜索「蘋果」,結果應該是這樣的:

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

我在加入弱,任何人幫助我的查詢? 預先感謝您〜

回答

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

事情是這樣的:

選擇pd.package_id,p.price,COUNT(*)從package_detail PD num_of_package_dtl頁上加入包頁。 package_id = pd.package_id加入產品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,第二行是2,而不是1.我用John Woo的答案得到了預期的結果。謝謝你的回答。 @Darren Naylor –

相關問題