Insert into select (from plusieurs tables)

Fermé
darkness2207 - 28 sept. 2007 à 16:41
 Fab - 4 avril 2014 à 22:52
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

darkness2207
28 sept. 2007 à 17:41
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
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
nodnod32 > Marc Moog
20 avril 2009 à 14:00
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
Merci beaucoup :)
0
taclep
0
Merci beaucoup Marc, ca date mais ça vient de grandement m'aider :))
0
c'est normal que cela s'enregistre dans les deux tables.verifier ces trables ont des liens et conservent les clés.
courage
3
Posotaz Messages postés 489 Date d'inscription samedi 23 juin 2007 Statut Membre Dernière intervention 19 juin 2011 225
28 sept. 2007 à 23:41
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
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