SQL stuffs
Submitted by PiTiLeZarD on Tue, 11/07/2006 - 17:39
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 ...
