Mysql
 sql >> Base de données >  >> RDS >> Mysql

mysql join two table avec des identifiants séparés par des virgules

Vous pouvez utiliser FIND_IN_SET() et GROUP_CONCAT() sur ce,

SELECT  b.Group_ID, GROUP_CONCAT(a.name) name
FROM    Table2 b
        INNER JOIN Table1 a
            ON FIND_IN_SET(a.ID, b.Group_ID) > 0
GROUP   BY b.Group_ID

SORTIE

╔══════════╦═════════════════╗
║ GROUP_ID ║      NAME       ║
╠══════════╬═════════════════╣
║ 1        ║ Person1         ║
║ 2,3      ║ Person2,Person3 ║
╚══════════╩═════════════════╝

En passant, cette requête peut ne pas fonctionner aussi efficacement que prévu. Veuillez normaliser votre tableau correctement en ne sauvegardant pas les valeurs séparées par une virgule.

MISE À JOUR

GROUP_ID est assez déroutant. N'est-ce pas PersonIDList ? Quoi qu'il en soit, voici ma suggestion de conception de schéma :

Table PERSONNE

  • ID de personne (PK)
  • NomPersonne
  • autres colonnes..

Tableau GROUPE

  • ID de groupe (PK)
  • NomGroupe
  • autres colonnes..

Tableau PERSON_GROUP

  • PersonID (FK) (en même temps PK avec la colonne GroupID)
  • ID de groupe (FK)