Lier les lignes d'une table

Lier les lignes d'une table - SQL/NoSQL - Programmation

Marsh Posté le 11-12-2016 à 13:43:02    

Salut,
 
J'ai une table qui contient les lignes suivantes(il s'agit d'un échantillon et je n'affiche que les deux colonnes qui m’intéresse):
id est la clé et groupe est id qui permet de lié les clés entre elles.

Code :
  1. id,groupe
  2. 1,5
  3. 4,5
  4. 4,8
  5. 7,8
  6. 12,8
  7. 7,14
  8. 11,14
  9. 21,24
  10. 36,30
  11. 45,45


 
Je souhaite affecter au même id, le même numéro de groupe.
En sortie je souhaiterai

Code :
  1. id,groupe
  2. 1,5
  3. 4,5
  4. 7,5
  5. 12,5
  6. 7,5
  7. 11,5
  8. 21,24
  9. 36,30
  10. 45,45


 
1,4,7,12 et 7 on le même groupe car 1 est lié à 4 et 4 est lié à 7,12 et 7 est lié à 11.
 
Je ne sais pas si c'est possible de le faire en SQL.
j'avais pensé à faire une jointure de cette même table sur le groupe afin d'avoir de chaque côté des paires et ensuite faire une jointure hierarchique.
 
Pas sur que ça marche,si ça loop.
 
Merci
 

Reply

Marsh Posté le 11-12-2016 à 13:43:02   

Reply

Marsh Posté le 14-12-2016 à 15:37:48    

Salut donny3,
 
il y a plusieurs solutions, après il faut savoir ce que tu veux faire des tes données (traitements).
 
Partons de la table "test".

Code :
  1. select * from test;


https://snag.gy/Q02zse.jpg
 
Si tu veux juste la liste des id par groupe dans une ligne tu peux faire ça :  

Code :
  1. SELECT
  2.     tbl1.groupe, GROUP_CONCAT(DISTINCT tbl2.id) as 'Liste id'
  3. FROM
  4.     test tbl1
  5.         LEFT JOIN
  6.     test tbl2 ON tbl1.groupe = tbl2.groupe
  7. GROUP BY tbl1.groupe;


https://snag.gy/cOaKIW.jpg
 
groupe par id :  

Code :
  1. SELECT
  2.     tbl1.id, GROUP_CONCAT(DISTINCT tbl2.groupe) as 'Liste id'
  3. FROM
  4.     test tbl1
  5.         LEFT JOIN
  6.     test tbl2 ON tbl1.groupe = tbl2.groupe
  7. GROUP BY tbl1.id


 
Après si tu dois traiter des données, tu peux toujours lier tes tables avec d'autres et jouer sur les "group by"
Soit les deux tables :

Code :
  1. SELECT * FROM nom_id;
  2. SELECT * FROM nom_gp;


https://snag.gy/GHz3Ly.jpg https://snag.gy/7nZDjz.jpg
 
La requete suivante t'aidera peut-etre un peu plus :  

Code :
  1. SELECT
  2.     tbl1.id,
  3.     ni.n_id,
  4.     tbl2.groupe AS 'Group id',
  5.     ng.n_gp AS 'Group name'
  6. FROM
  7.     test tbl1
  8.         JOIN
  9.     nom_id ni ON ni.id = tbl1.id
  10.         LEFT JOIN
  11.     test tbl2 ON tbl1.groupe = tbl2.groupe
  12.         JOIN
  13.     nom_gp ng ON ng.id = tbl2.groupe
  14. GROUP BY tbl1.id , tbl2.groupe


 
 
https://snag.gy/TOnDpv.jpg
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed