Rechercher : dans
Par :

Insert into select (from plusieurs tables)

Dernière réponse le 30 jun 2009 à 18:07:50 darkness2207, le 28 sep 2007 à 16:41:59 
 Signaler ce message aux modérateurs

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

1

clara, le 28 sep 2007 à 17:26:26

C'est normal que cela s'enregistre dans les deux tables.verifier ces trables ont des liens et conservent les clés.
courage

Répondre à clara

2

darkness2207, le 28 sep 2007 à 17:41:39

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

Répondre à darkness2207

4

Marc Moog, le 25 jui 2008 à 01:18:04
  • +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

Répondre à Marc Moog

5

nodnod32, le 20 avr 2009 à 14:00:59

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???

Répondre à nodnod32

3

Posotaz, le 28 sep 2007 à 23:41:09
  • +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).

Répondre à Posotaz

6

 ben.83, le 30 jun 2009 à 18:07:50
  • +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

Répondre à ben.83