我有兩個表,分別命名為「供應商」和「聯絡人」。
聯絡人表中的資料對應於供應商表中的一筆記錄。
供應商資料
id | 姓名 |
---|---|
1 | 馬力 |
2 | 華為 |
聯絡人資料
id | 供應商ID | 聯繫 |
---|---|---|
1 | 1 | 約翰 |
2 | 1 | 史密斯 |
3 | 1 | 會 |
4 | 2 | 美國能源部 |
5 | 2 | 燈芯 |
現在,我想做一個應傳回以下結果的查詢
id | 姓名 | 聯繫 |
---|---|---|
1 | 馬力 | 約翰、史密斯、威爾 |
2 | 華為 | 美國能源部,威克 |
或應該傳回以下結果
id | 姓名 | 聯繫 | 聯繫 | 聯繫 |
---|---|---|---|---|
1 | 馬力 | 約翰 | 史密斯 | 會 |
2 | 華為 | 美國能源部 | 燈芯 |
您可以使用 MySQL
GROUP_CONCAT
聚合函數來取得您的第一個輸出表。它自己的ORDER BY
子句將允許您檢查行的串聯順序。您可以使用視窗函數
ROW_NUMBER
透過對供應商進行分割來為 Contact 表中的每一行分配排名。然後使用IF
語句將聯絡人分成三列,該語句會檢查排名的三個可能值。MAX
聚合函數將允許您刪除空值。如果每個供應商有超過三個客戶,第二個查詢可能無法運作。在這種情況下,您可以修改查詢以包含可能的最大供應商數量,或使用準備好的語句。如果您確實需要這樣的解決方案,請在下面發表評論。
為了更好地理解,您可以在此處使用這些解決方案。第一個解決方案適用於任何 MySQL 版本,而第二個解決方案適用於 MySQL 8。