Insert into select (from plusieurs tables)

darkness2207 -  
 Fab -
Bonjour,

je voudrais faire des insertions dans une table TABLE1 à partir de données issues de 2 autres tables, TABLE2 et TABLE3.

j'aimerais faire fonctionner cela en 1 seule requête du type

insert into TABLE1 (id1,lib1,titre1)
select id2,lib2,titre3
from TABLE,TABLE3
where id2=id3

j'ai fait un essai et cela m'a bien inséré tous les couple TABLE2/TABLE3 dans TABLE1.

je me demande cependant si cela est fiable ?
est-ce qu'il n'y a aucun risque de bug ?

merci d'avance pour les futures réponses

4 réponses

  1. darkness2207
     
    merci pour ta réponse clara,

    je me suis trompé dans la requete que j'ai mentionné (oups)
    je recommence depuis le début:

    peut-on être sûr qu'une requête de cette sorte (ci-dessous) renvoie bien chaque couple possible dans TABLE ?

    insert into TABLE1 (lib2,lib3)
    select lib2,lib3
    from TABLE2,TABLE3

    exemple:

    on a les données suivantes:

    table PERSONNE (idpers / nompers)
    1 / marc
    2 / arnaud
    3 / antoine

    table LIEU (idlieu / nomlieu)
    1 / restaurant
    2 / cinéma
    3 / café

    on execute alors la requete suivante:

    insert into SORTIES (pers,lieu)
    select nomlieu,nompers
    from PERSONNE, LIEU

    et on obtient le résultat

    table SORTIES (pers/ lieu)
    marc / restaurant
    marc / cinéma
    marc / café
    arnaud/ restaurant
    arnaud/ cinéma
    arnaud/ café
    antoine/ restaurant
    antoine/ cinéma
    antoine/ café

    peut-on être sûr de la fiabilité d'une telle requête (qu'elle ne renvoie pas de doublon, qu'elle renvoie bien chaque couple 1 seule fois...)?

    merci d'avance
    13
    1. Marc Moog
       
      Il n'y a aucun besoin de liens entre les tables. Attention la Requête correcte est :
      INSERT INTO SORTIES ( pers, lieu )
      SELECT nompers, nomlieu
      FROM PERSONNE, LIEU;
      une clé sur les deux champs de la table SORTIES est souhaitable
      0
      1. nodnod32 > Marc Moog
         
        est ce que la table sorties est déja créé dans la base de données ou vient d'étre crée dans la requete pour avoir ce resultat???
        0
    2. ekekekeke
       
      Merci beaucoup :)
      0
    3. jtedi
       
      taclep
      0
    4. Fab
       
      Merci beaucoup Marc, ca date mais ça vient de grandement m'aider :))
      0
  2. clara
     
    c'est normal que cela s'enregistre dans les deux tables.verifier ces trables ont des liens et conservent les clés.
    courage
    3
  3. Posotaz Messages postés 505 Statut Membre 226
     
    Salut Darkness,

    C'est une question fort subtile parce qu'à partir du moment on l'où implique deux tables dans une requête Select on s'attend à avoir une jointure (n tables = n-1 jointures) entre ces deux tables.

    Malgré tout je ne vois rien qui puisse rendre cette requête non fiable à moins que tes tables, dès le départ contiennent des doublons (dans quel cas tu feras un select distinct).
    3
  4. ben.83
     
    Vous pouvez utilisé union all entre les deux select
    EXP:

    insert into table1
    select * from table1
    union all
    select * from table2

    à conditon que les 3 tables ont la même structure
    1