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

SQL Oracle Discussion :

insert into table(.,.,.) select . from t2, select . from t3


Sujet :

SQL Oracle

  1. #1
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut insert into table(.,.,.) select . from t2, select . from t3
    Bonjour à tous,

    voilà mon problème est simple.
    Est-il possible d'insérer des données dans une table provenant d'autres table

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     insert into table1 (col1,col2,col3) select t2 from table2 where t3 = 10, select t4 from table3 where t5 = 20, select t6 from table4 where t7 = 40;
    D'avance merci pour vos réponses
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  2. #2
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par Stessy Voir le message
    Bonjour à tous,

    voilà mon problème est simple.
    Est-il possible d'insérer des données dans une table provenant d'autres table

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     insert into table1 (col1,col2,col3) select t2 from table2 where t3 = 10, select t4 from table3 where t5 = 20, select t6 from table4 where t7 = 40;
    D'avance merci pour vos réponses
    Avez-vous fait un test ?

  3. #3
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    UNION ALL pour concaténer les résultats de tes SELECT

  4. #4
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut
    Citation Envoyé par orafrance Voir le message
    UNION ALL pour concaténer les résultats de tes SELECT
    Bonjour Orafance,

    le union all ne marchera pas car je souhaite que le premier select me donne la valeur à rentrer dans la première colonne, le deuxième select me donne la valeur à rentrer dans la deuxième colonne, ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into personnes_match (match_id,personne_id,prix_locomotion_id) select match_id from match where match_id = 7 union all select personne_id from personnes where personne_id = 448 union all select  1 from dual
    Cette query ne marche pas: 'not enough values'


    Merci
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par Stessy Voir le message
    Bonjour à tous,

    voilà mon problème est simple.
    Est-il possible d'insérer des données dans une table provenant d'autres table

    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     insert into table1 (col1,col2,col3) select t2 from table2 where t3 = 10, select t4 from table3 where t5 = 20, select t6 from table4 where t7 = 40;
    D'avance merci pour vos réponses
    sans doute qqch du style non?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into table1 (col1,col2,col3) 
    values (
      (select t2 from table2 where t3 = 10), 
      (select t4 from table3 where t5 = 20), 
      (select t6 from table4 where t7 = 40)
    );

  6. #6
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    sans doute qqch du style non?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    insert into table1 (col1,col2,col3) 
    values (
      (select t2 from table2 where t3 = 10), 
      (select t4 from table3 where t5 = 20), 
      (select t6 from table4 where t7 = 40)
    );
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Insert into table1 (col1, col2, col3)
    Select t2, t4, t6
      From table2, table3, table4
    Where t3 = 10
      and t5 = 20
      and t6 = 40
    mais je pense maintenant que son problème doit être un peu plus compliqué que ça

  7. #7
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    sauf erreur cette solution provoquera un produit cartésien donc bien plus de ligne qu'attendue non ?

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonsoir,

    Union semble une bonne solution mais besoin un pivot peut être ?

    Si l' union des tables sources donnent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select 'S1' as "SOURCE",name,value from S1 where value>=10
    union
    select 'S2' as "SOURCE",name,value  from S2 where value>=200
    union 
    select 'S3' as "SOURCE",name,value  from S3 where value>=3000
    ;

    S1|nb|10
    S1|nb|20
    S1|nb|30
    S2|nb|200
    S2|nb|300
    S3|nb|3000


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT 
    CASE WHEN SOURCE='S1' THEN VALUE ELSE NULL END as "COL1",
    CASE WHEN SOURCE='S2' THEN VALUE ELSE NULL END as "COL2",
    CASE WHEN SOURCE='S3' THEN VALUE ELSE NULL END as "COL3"
    from
    (
    select 'S1' as "SOURCE",ID,name,value from S1 where value>=10
    union
    select 'S2' as "SOURCE",ID,name,value  from S2 where value>=200
    union 
    select 'S3' as "SOURCE",ID,name,value  from S3 where value>=3000
    )
    ;

    10|NULL|NULL
    20|NULL|NULL
    30|NULL|NULL
    NULL|200|NULL
    NULL|300|NULL
    NULL|NULL|3000


    En rajoutant un flag sur les lignes à regrouper, un group by et un sum pourrait les remettre sur la mettre ligne...

    le flag doit être unique et bien évidement commun au ligne que l' on souhaite regrouper, par exemple une date si le contexte le permet ou autre chose peu importe

    20080206|10|NULL|NULL
    20080201|20|NULL|NULL
    20071201|30|NULL|NULL
    20080206|NULL|200|NULL
    20080101|NULL|300|NULL
    20080101|NULL|NULL|3000

    group by et sum :
    20071201|30|NULL|NULL
    20080101|NULL|300|3000
    20080201|20|NULL|NULL
    20080206|10|200|NULL

    Sur le résultat obtenu,
    INSERT INTO <CIBLE>
    SELECT ...
    GROUP BY

    C' est tordu mais bon ... si quelqu' un connait bien les pivots il trouvera surement plus simple que ces agrégats...

    Bonne soirée

  9. #9
    Membre expérimenté

    Homme Profil pro
    Senior Développeur JEE
    Inscrit en
    Avril 2002
    Messages
    795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Senior Développeur JEE
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2002
    Messages : 795
    Points : 1 660
    Points
    1 660
    Par défaut
    Et le vainqueur est ....

    Roulement de tambour

    laurentschneider

    Complètement idiot que je n'avais même pas pensé mettre des parenthèses pour chaque requête.

    J'avais utilisé la même manière que toi mais sans les parenthèses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO table1 (col1,col2,col3) 
    VALUES (
      SELECT t2 FROM table2 WHERE t3 = 10, 
     SELECT t4 FROM table3 WHERE t5 = 20, 
      SELECT t6 FROM table4 WHERE t7 = 40
    );
    En tout cas merci beaucoup à vous tous.

    Problème résolu je pense
    Langages : Java, SQL
    Outils : Eclipse, Intellij
    SGBD : Oracle, PostgreSQL
    Mes Articles

  10. #10
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par orafrance Voir le message
    sauf erreur cette solution provoquera un produit cartésien donc bien plus de ligne qu'attendue non ?
    Bien sûr ! Mais qui peut dire que c'est incorrecte ?
    L'autre solution marché que si le nombre des enregistrements du chaque select est égal à 1. Et comme 1 multiplie par 1 fait 1 voila que le produit cartésien est correcte.
    Je saurais gré à Stessy qu'il nous explique pour quoi cette solution est bonne à parte le fait que son code est proche de celui de Laurent.

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

Discussions similaires

  1. insert into table from another table
    Par ALTHON dans le forum Développement
    Réponses: 1
    Dernier message: 08/06/2012, 08h51
  2. INSERT INTO table SELECT
    Par Jerome S dans le forum Requêtes
    Réponses: 7
    Dernier message: 06/01/2012, 11h18
  3. INSERT INTO table SELECT
    Par ahmedige dans le forum Oracle
    Réponses: 1
    Dernier message: 13/07/2011, 16h40
  4. Insert into matable (Chp1, Chp2, Chp3) select distinct
    Par Perplexe dans le forum Requêtes
    Réponses: 6
    Dernier message: 25/09/2009, 14h52
  5. insert into table values/ insert into table select
    Par aaronw dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/05/2005, 15h14

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