SQL stuffs

Tagged:

On imagine 3 tables

  • 1) des systèmes avec une clé SYSID
  • 2) des groupes avec une clé GRID et un champ GRSYS qui le lie au système
  • 3) des données liées a un système avec un champ DTASYS

le but étant d'afficher les données présentes dans la table 3 autant de fois qu'il y a de groupes associés au système présent dans le champ DTASYS.

En gros si on a pour les système

  • SYS1 SYS2

pour les groupes

  • (GR1, SYS1) (GR2, SYS1) (GR3, SYS2) (GR4,SYS2) (GR5, SYS2)

pour data (supposé tous associé au même système)

  • (SYS1, DTA1) (SYS1, DTA2)

on doit avoir en résultat :

  • (SYS1, DTA1, GR1)
  • (SYS1, DTA1, GR2)
  • (SYS1, DTA2, GR1)
  • (SYS1, DTA2, GR2)

Vla une requête qui résoud ce problème d'un coup d'un seul

SELECT *
FROM TB_DTA AS D
RIGHT OUTER JOIN
(SELECT * FROM GROUPS, SYSTEMS
  WHERE GRSYS = SYSID) AS T
ON T.SYSID = D.DTASYS
WHERE D.DTASYS IS NOT NULL

Et voila on a dupliqué nos lignes en créant une pseudo table temporaire dans le right outer join !

PS : Si ce post vous a vraiment soulé appelez le 0808080808 et tapez 3 ...