J'ai deux tables nommées "Fournisseurs" et "Contacts".
Les données de la table des contacts correspondent à un enregistrement de la table des fournisseurs.
Données fournisseurs
id | Nom |
---|---|
1 | Puissance |
2 | Huawei |
Données de contact
id | ID fournisseur | Contact |
---|---|---|
1 | 1 | Jean |
2 | 1 | Smith |
3 | 1 | Volonté |
4 | 2 | Département américain de l'énergie |
5 | 2 | Mèche |
Maintenant, je souhaite faire une requête qui devrait renvoyer les résultats suivants
id | Nom | Contact |
---|---|---|
1 | Puissance | John, Smith, Will |
2 | Huawei | Département américain de l'énergie, Wake |
Ou les résultats suivants devraient être renvoyés
id | Nom | Contact | Contact | Contact |
---|---|---|---|---|
1 | Puissance | Jean | Smith | Volonté |
2 | Huawei | Département américain de l'énergie | Mèche |
Vous pouvez utiliser MySQL
GROUP_CONCAT
聚合函数来获取您的第一个输出表。它自己的ORDER BY
la clause vous permettra de vérifier l'ordre de concaténation des lignes.Vous pouvez utiliser les fonctions de fenêtre
ROW_NUMBER
通过对供应商进行分区来为 Contact 表中的每一行分配排名。然后使用IF
语句将联系人分成三列,该语句将检查排名的三个可能值。MAX
Les fonctions d'agrégation vous permettront de supprimer les valeurs nulles.La deuxième requête peut ne pas fonctionner s'il y a plus de trois clients par fournisseur. Dans ce cas, vous pouvez modifier la requête pour inclure le nombre maximum de fournisseurs possible ou utiliser une instruction préparée. Si vous avez vraiment besoin d'une telle solution, veuillez laisser un commentaire ci-dessous.
Pour une meilleure compréhension, vous pouvez utiliser ces solutions ici. La première solution fonctionne avec n'importe quelle version de MySQL, tandis que la seconde solution fonctionne avec MySQL 8.