2013-03-07 41 views
0

顧客接合3代表的MySQL

╔═══════╦══════════╗ 
║ CUSID ║ CUS NAME ║ 
╠═══════╬══════════╣ 
║  1 ║ AA  ║ 
║  2 ║ BB  ║ 
║  3 ║ CC  ║ 
╚═══════╩══════════╝ 

CusSeaFood

╔════╦═══════╦══════════╗ 
║ ID ║ CUSID ║ NAME ║ 
╠════╬═══════╬══════════╣ 
║ 1 ║  1 ║ SeaFoodA ║ 
║ 2 ║  1 ║ SeaFoodB ║ 
║ 3 ║  2 ║ SeaFoodC ║ 
╚════╩═══════╩══════════╝ 

CusPizza

╔════╦═══════╦══════╗ 
║ ID ║ CUSID ║ NAME ║ 
╠════╬═══════╬══════╣ 
║ 1 ║  1 ║ PAA ║ 
║ 2 ║  2 ║ PBB ║ 
╚════╩═══════╩══════╝ 

銅sSnack

╔════╦═══════╦══════╗ 
║ ID ║ CUSID ║ NAME ║ 
╠════╬═══════╬══════╣ 
║ 1 ║  2 ║ SAA ║ 
║ 2 ║  3 ║ SBB ║ 
╚════╩═══════╩══════╝ 

要算多少海鮮,比薩餅或零食是爲了通過顧客例如像下面。

Cus ID, Cus Name, Number Of SeaFood, Sea Food info, Number Of Pizza, Pizza info, Number of Snack, Snack info. 

客戶可能不會訂購所有3種類型的食品。

+0

您需要使用LEFT OUTER JOIN。你有什麼嘗試? – Barmar 2013-03-07 07:21:10

回答

4

您需要通過子查詢分別計算每個計數,以便獲得正確的結果。這會阻止你計算重複記錄。

SELECT a.*, 
     COALESCE(b.totalSeaFood, 0) totalSeaFood, 
     COALESCE(c.totalPizza, 0) totalPizza, 
     COALESCE(d.totalSnack, 0) totalSnack 
FROM Customer a 
     LEFT JOIN 
     (
      SELECT cusID, COUNT(*) totalSeaFood 
      FROM CusSeaFood 
      GROUP BY cusID 
     ) b ON a.cusID = b.CusID 
     LEFT JOIN 
     (
      SELECT cusID, COUNT(*) totalPizza 
      FROM CusPizza 
      GROUP BY cusID 
     ) c ON a.cusID = c.CusID 
     LEFT JOIN 
     (
      SELECT cusID, COUNT(*) totalSnack 
      FROM CusSnack 
      GROUP BY cusID 
     ) d ON a.cusID = d.CusID 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接:

結果

╔═══════╦══════════╦══════════════╦════════════╦════════════╗ 
║ CUSID ║ CUS NAME ║ TOTALSEAFOOD ║ TOTALPIZZA ║ TOTALSNACK ║ 
╠═══════╬══════════╬══════════════╬════════════╬════════════╣ 
║  1 ║ AA  ║   2 ║   1 ║   0 ║ 
║  2 ║ BB  ║   1 ║   1 ║   1 ║ 
║  3 ║ CC  ║   0 ║   0 ║   1 ║ 
╚═══════╩══════════╩══════════════╩════════════╩════════════╝ 
+0

感謝您提供的鏈接。 – kitokid 2013-03-07 07:48:56

+0

不客氣':D' – 2013-03-07 07:49:11

1

您的示例中的「海食品信息」,「披薩信息」等對我沒有意義。如果顧客訂購了不止一份海鮮或披薩,那麼它應該如何在這裏展示?

通常你會看到多行,每個訂購的東西。要獲得這些信息,您甚至不需要加入,只需要UNION即可。

SELECT * FROM CusSeaFood WHERE CusID = ? 
UNION SELECT * FROM CusPizza WHERE CusID = ? 
UNION SELECT * FROM CusSnack WHERE CusID = ?