Insert into select (from plusieurs tables)

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

  • Votes
  • Date
  • Date décroissante
  1. 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
    1. 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
    2. @Marc Moogest 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???
    3. Merci beaucoup :)
    4. Merci beaucoup Marc, ca date mais ça vient de grandement m'aider :))
  2. c'est normal que cela s'enregistre dans les deux tables.verifier ces trables ont des liens et conservent les clés.
    courage
    1. 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).
      1. 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