J'ai un problème pour rejoindre trois tables. La première tentative de jointure de deux tables est réussie, mais le résultat est incorrect sur la troisième table...
J'ai trois tables machine_list est mainTable, puis applicable_rpm et applicable_product sont quelques détails de machine_list
Tableau : machine_list
| id | machine_number | machine_brand | --------------------------------------- | 1 | MN-1 | TOYO | | 2 | MN-2 | AMITA |
Tableau : applicable_rpm
| id | mc_recordID | rpm | -------------------------- | 1 | 1 | 20 | | 2 | 2 | 20 | | 3 | 2 | 25 |
Formulaire : produit_applicable
| id | mc_recordID | productline| --------------------------------- | 1 | 1 | mono | | 2 | 2 | mono | | 3 | 2 | poly |
Je veux revenir comme ceci :
| machine_number | rpm | twine | ---------------------------------------- | MN-1 | 20 | mono | | MN-2 | 20, 25 | mono, poly |
J'ai d'abord essayé de joindre les deux tables en utilisant la requête suivante :
SELECT t1.machine_number, GROUP_CONCAT(' ', t2.speed) machine_speed FROM machine_list t1 INNER JOIN applicable_rpm t2 ON t1.id = t2.mc_recordID GROUP BY t1.id;
Le résultat est :
| machine_number | rpm | --------------------------- | MN-1 | 20 | | MN-2 | 20, 25 |
C'est correct, mais lorsque j'essaie le troisième tableau, il duplique ses valeurs.
Voici ma requête :
SELECT t1.machine_id, GROUP_CONCAT(' ', t2.speed) machine_speed, GROUP_CONCAT(' ', t3.twine) production_line FROM machine_list t1 INNER JOIN applicable_rpm t2 ON t1.id = t2.mc_recordID INNER JOIN applicable_product t3 ON t1.id = t3.mc_recordID GROUP BY t1.id;
Le résultat est :
| machine_number | rpm | twine | ---------------------------------------- | MN-1 | 20, 20 | mono, poly | | MN-2 | 20, 25 | mono, poly |
Que dois-je faire ?
On dirait que votre jointure génère des lignes en double.
Nous pouvons obtenir le résultat souhaité en utilisant une sous-requête.
Cela renverra le résultat attendu :
Si vous ne regroupez pas, vous verrez qu'il y a deux lignes associées à MN-2. Donc si vous faites un group_concat il affichera les valeurs de la colonne sélectionnée dans les deux lignes.
Vous devrez utiliser des sélections imbriquées ici. Similaire à :
Après réflexion, vous pouvez également essayer d'utiliser DISTINCT pour GROUP_CONCAT