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 :

SELECT de deux tables pour INSERT dans une troisième


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 45
    Points : 46
    Points
    46
    Par défaut SELECT de deux tables pour INSERT dans une troisième
    Bonjour,

    J'ai :
    1 table Source1 [id, col1, col2]
    1 table Source2 [id, col3] (jointure 1..2 avec Source1)

    pour alimenter :
    1 table Cible [id, col1, col2, col3A, col3B] vide initialement, et où :
    id = Source1.id
    col1 = Source1.col1
    col2 = Source1.col2
    col3A = 1ère occurence de Source2.col3
    col3B = 2ème occurence (éventuelle) de Source2.col3

    Est-il possible de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO Cible (id, col1, col2, col3A, col3B)
    SELECT s1.id, s1.col1, s1.col2, s2.col3 ????
    FROM Source1 s1
    JOIN Source2 s2
    ON s1.id = s2.id
    en une seule fois ? Car la jointure peut ramener 1 à 2 lignes par id, je ne sais pas s'il existe une astuce permettant de faire ça en une seule fois (par ex, je prend le min de col3 la 1ère fois et le max la 2ème fois, s'il est différent du min).
    Sinon, je suis en train de faire un insert des col1, col2, puis une 2ème requête avec un update col3.

    Merci pour toute proposition !!
    Vincent

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 098
    Points : 28 409
    Points
    28 409
    Par défaut
    Tu as presque tout fait...
    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
    INSERT INTO 
        Cible 
        (   id
        ,   col1
        ,   col2
        ,   col3A
        ,   col3B
        )
    SELECT  s1.id           id
        ,   s1.col1         col1
        ,   s1.col2         col2
        ,   MIN(s2.col3)    col3A
        ,   CASE COUNT(*) WHEN 2 THEN MAX(s2.col3) END col3B
    FROM    Source1 s1
        INNER JOIN 
            Source2 s2
            ON  s1.id = s2.id
    GROUP BY s1.id
        ,   s1.col1
        ,   s1.col2
    Mais c'est facile parce que tu n'as que deux lignes au plus dans s2
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    cool, j'essaie ça demain !

    j'avais peut-être presque tout fait, mais je ne voyais pas comment faire pour le x2...
    Et évidemment, mon cas réel est un peu plus complexe, j'ai 8 tables sources, 5 en relation 1..1 et 3 en relation 1..2, le tout à stocker dans une seule table destination.
    Mais ça devrait le faire !
    Merci.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 098
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 098
    Points : 28 409
    Points
    28 409
    Par défaut
    C'est pour une édition je suppose...
    Sinon, c'est un superbe exemple de dénormalisation
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2006
    Messages : 45
    Points : 46
    Points
    46
    Par défaut
    C'est effectivement suite à une dénormalisation et je dois récupérer les données des anciennes tables vers les nouvelles.
    Je teste ça dans la journée et si c'est ok, je passe le topic à Résolu.

  6. #6
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    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 799
    Points : 34 046
    Points
    34 046
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par vinsse2001 Voir le message
    C'est effectivement suite à une dénormalisation et je dois récupérer les données des anciennes tables vers les nouvelles.
    J'ose espérer que c'est pour normaliser que tu cherches à faire ça et pas pour dénormaliser ?
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fusionner deux tables pour afficher dans une même table
    Par mychan dans le forum DBDesigner
    Réponses: 3
    Dernier message: 12/08/2013, 09h20
  2. [base 9i] trigger pour insert dans une table identique
    Par gaultier dans le forum Oracle
    Réponses: 3
    Dernier message: 18/01/2012, 11h07
  3. Réponses: 3
    Dernier message: 20/03/2008, 14h35
  4. Problème format de champs pour insertion dans une base FileMaker
    Par guiguikawa dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 28/03/2007, 22h27
  5. [ODBC] Récupération d'une donnée pour insertion dans une autre table
    Par rom950 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 10/03/2006, 17h13

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