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

Requêtes MySQL Discussion :

Requête INSERT avec SELECT multiple


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut Requête INSERT avec SELECT multiple
    Bonjour,

    pour insérer dans une table des données provenant d'une autre table, on a recours à une requête INSERT INTO table1 SELECT col1, col2 FROM table2. Cela convient si les données à insérer dans table1 proviennent toutes de table2. Par contre, je n'ai pas trouvé comment faire pour insérer dans table1 des données provenant de plusieurs tables.
    Si par exemple, dans table1, on veut insérer quelques colonnes issues de table2 et d'autres issues de table3, est-ce aussi faisable en une seule requête ou faut-il en faire plusieurs ?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    Bonjour LaurentSc,

    C'est faisable, il faut utiliser une syntaxe du genre :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into T0(T0C1, T0C2)
    select T1C1
         , T2C2
    from T1
    inner join T2
       on T2ID=T1ID

  3. #3
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    Merci pour la réponse. Voici ce que j'ai fait :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into li_license AS LI (AP_ident, US_sesa_OWNLIC)
    select AP.AP_ident,
         US.US_sesa
    from ap_application AP
    inner join us_user US
       on US.US_sesa=LI.US_sesa_OWNLIC
    Mais ça me donne une erreur de syntaxe...Qu'est-ce qui ne va pas ?
    Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS LI (AP_ident, US_sesa_OWNLIC) select AP.AP_ident, US.US_sesa from ap_app' at line 1

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    il faut supprimer "AS LI" sur la première ligne

  5. #5
    Membre Expert
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 497
    Billets dans le blog
    1
    Par défaut
    J'ai suivi votre indication. Donc ma requête est devenue :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into li_license (AP_ident, US_sesa_OWNLIC)
    select AP.AP_ident,
         US.US_sesa
    from ap_application AP
    inner join us_user US
       on US.US_sesa=US_sesa_OWNLIC

    Mais
    Error Code: 1054. Unknown column 'US_sesa_OWNLIC' in 'on clause'
    alors que :
    Code sql : 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
    CREATE TABLE LI_license(
       LI_ident INT UNSIGNED AUTO_INCREMENT,
       LI_activate_date DATE NOT NULL,
       LI_deactivate_date DATE,
       AP_ident INT UNSIGNED NOT NULL,
       US_sesa_OWNLIC INT NOT NULL,
       PRIMARY KEY(LI_ident),
       FOREIGN KEY(AP_ident) REFERENCES AP_application(AP_ident),
       FOREIGN KEY(US_sesa_OWNLIC) REFERENCES OWN_owner_license(US_sesa_OWNLIC)
    );
     
     
     
    CREATE TABLE US_user(
       US_sesa INT,
       US_firstname VARCHAR(30),
       US_lastname VARCHAR(30),
       PRIMARY KEY(US_sesa)
    );
    Les 2 colonnes de la clause ON ont le même type.

    La clé étrangère US_sesa_OWNLIC de la table LI_license référence la table OWN_owner_license qui elle, a une clé étrangère qui référence la table US_sesa.

    J'ai tenté une requête qui la mentionne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into li_license (AP_ident, US_sesa_OWNLIC)
    select AP.AP_ident,
         US.US_sesa
    from ap_application AP
    inner join own_owner_license OWN ON OWN.US_sesa_OWNLIC=US_sesa_OWNLIC
    inner join us_user US ON OWN.US_sesa_OWNLIC=US.US_sesa
    Il n'y a plus d'erreur mais
    0 row(s) affected Records: 0 Duplicates: 0 Warnings: 0
    et la table li_license est restée vide

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    et en ajoutant l'alias AP devant la colonne de jointure comme ceci :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into li_license (AP_ident, US_sesa_OWNLIC)
    select AP.AP_ident,
         US.US_sesa
    from ap_application AP
    inner join us_user US
       on US.US_sesa=AP.US_sesa_OWNLIC

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    Ma proposition s'appuie sur votre post n°5

    Citation Envoyé par laurentSc Voir le message
    J'ai suivi votre indication. Donc ma requête est devenue :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into li_license (AP_ident, US_sesa_OWNLIC)
    select AP.AP_ident,
         US.US_sesa
    from ap_application AP
    inner join us_user US
       on US.US_sesa=US_sesa_OWNLIC
    Dans ce post, on voit bien qu'il y a une jointure entre AP et US (dernière ligne de la requête), c'est la raison pour laquelle j'ai proposé d'ajouter l'alias AP devant le nom de colonne au niveau de la jointure (opérateur ON)
    Maintenant si cette colonne est absente de la table AP, cette jointure n'a aucun sens

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

Discussions similaires

  1. Insertion avec select multiples et valeurs statiques multiples
    Par Adrien.chevalier2 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 24/04/2017, 15h22
  2. [SQL Server 2K5] Requête INSERT avec deux SELECT
    Par gassisprog dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/08/2010, 14h55
  3. Requête INSERT avec 2 SELECT sans liaison?
    Par kooky dans le forum SQL
    Réponses: 3
    Dernier message: 21/03/2010, 15h57
  4. Requête INSERT avec VALUES et SELECT
    Par FredLo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/02/2010, 14h16
  5. Requête avec select multiple
    Par dams580 dans le forum Requêtes
    Réponses: 7
    Dernier message: 09/10/2007, 11h52

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