IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Réorganiser deux tables dans une view


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 8
    Points
    8
    Par défaut Réorganiser deux tables dans une view
    Bonjour,

    Je suis en train d'écrire une requette, j'arrive pesque à mes fin, ca reste bancal.
    Je m'explique:

    je récupère deux tables:
    1er Table elle contient des utilisateurs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Table: UTILISATEURS_TABLE
    ID |  Utilisateurs  |    GUID
    1  |      King      |  YT65-TR543
    2  |      Chuck     |  NO43-R54IS
    3  |      Bob       |  543G-ERT45
    ...
    et la deuxiéme contient des infos sur ces utilisateurs:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Table: INFOS
    ID  |  IDENTIFIER  | STRING_VALUE     |   GUID
    54  |  NUM_TEL     | 0600000000       | YT65-TR543
    55  |  SALAIRE     | 19,000           |  YT65-TR543
    57  |  ADRESSE     | 2 Place du centre| YT65-TR543
    68  |  NUM_TEL     | 0600000001       | NO43-R54IS
    69  |  SALAIRE     | 100,000          | NO43-R54IS
    98  |  ADRESSE     | 1 Place du centre| NO43-R54IS
    ...
    Et mon but c'est d'obtenir ça (et que l'on puisse faire des updates dessus):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UTILISATEURS   |  NUM_TEL   |  SALAIRE  |    ADRESSE       |  GUID
         King      | 0600000000 |   19,000  | 2 Place du centre|  YT65-TR543 
         Chuck     | 0600000001 |   100,000 | 1 Place du centre|  NO43-R54IS

    Voila ce que j'ai fait:

    -Je crée une VIEW avec tous les NUM_TEL et les GUID correspondant
    -Je recrée une VIEW avec les SALAIRE et GUID tous en faisant une jointure de la vue précédente (via le GUID)
    - re avec ADRESSE et cette dernière VIEW créé
    -Je crée une derniére VIEW de la jointure entre la table UTILISATEUR et ma dernière VIEW qui contient toutes mes infos


    code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    CREATE VIEW INFO_TEL (NUM_TEL)
    AS
    SELECT string_value, GUID 
    FROM infos WHERE IDENTIFIER = 'NUM_TEL';
     
    CREATE VIEW INFO_SAL ( SALAIRE ) 
    AS 
    SELECT string_value, GUID
    FROM infos WHERE IDENTIFIER = 'SALAIRE';
     
    CREATE VIEW INFO_ADR ( ADRESSE ) 
    AS 
    SELECT string_value, GUID
    FROM infos WHERE IDENTIFIER = 'ADRESSE';
     
    CREATE VIEW INFO_TEL_SAL
    AS
    SELECT m.NUM_TEL, l.SALAIRE, l.GUID
    FROM info_tel m JOIN info_sal l
    ON (l.guid = m.guid);
     
    CREATE VIEW  TOUS_INFOS
    AS 
    SELECT m.num_tel, m.salaire, l.adresse, l.guid
    FROM info_tel_sal m JOIN info_adr
    ON (l.guid = m.guid);
     
    CREATE VIEW UTIL_INFOS
    AS
    SELECT m.utilisateurs, l.num_tel, l.salaire, l.adresse, l.guid
    FROM  utilisateurs_table m JOIN tous_infos
    ON (l.guid = m.guid);
    J'obtiens bien la table que je voulais au depart mais l'écriture est trés lourde (car j'ai beaucoup plus de champs que ça), et également je ne peut pas faire d'UPDATE sur cette dernière VIEW.

    Est-ce qu'il y aurait un moyen plus simple de faire? et qui permette de faire des updates ?

    merci.

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 792
    Points : 34 013
    Points
    34 013
    Billets dans le blog
    14
    Par défaut
    Ce que tu veux faire est de la cosmétique et ce n'est pas le boulot du SGBD mais du logiciel utilisateur.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 811
    Points
    17 811
    Par défaut
    Essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    SELECT
        UT.Utilisateurs,
        IN.STRING_VALUE,
        IL.STRING_VALUE,
        IA.STRING_VALUE,
        UT.GUID
    FROM
        UTILISATEURS_TABLE UT
        LEFT OUTER JOIN INFOS IN
          ON IN.GUID = UT.GUID
         AND IN.IDENTIFIER = 'NUM_TEL'
        LEFT OUTER JOIN INFOS IL
          ON IL.GUID = UT.GUID
         AND IL.IDENTIFIER = 'SALAIRE'
        LEFT OUTER JOIN INFOS IA
          ON IA.GUID = UT.GUID
         AND IA.IDENTIFIER = 'ADRESSE'
    Mais cette modélisation c'est très très très loin d'être la panacée, vous foncez directement dans les problèmes suivant :
    1. Difficultés de remplissage
    2. Difficulté d'extraction
    3. Difficultés de mise à jour
    4. Pas de typage fort de donnée implquant des conversions
    5. Mauvaises performances

Discussions similaires

  1. liaison deux tables dans une boucle
    Par crazylia dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/04/2010, 12h55
  2. Réponses: 4
    Dernier message: 18/06/2009, 16h12
  3. [VB6]Grouper les données des deux tables dans une troisième
    Par Abed_H dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 29/04/2009, 12h29
  4. Relier les champs de deux tables dans une interface graphique
    Par laurentlorient dans le forum Débuter
    Réponses: 1
    Dernier message: 26/04/2009, 23h34
  5. UPDATE de deux tables dans une meme requete
    Par onizuka159 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/05/2007, 15h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo