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

Langage SQL Discussion :

Insert Into + Jointure ?


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut Insert Into + Jointure ?
    Bonjour

    J'aimerais savoir comment écrire un "Insert Into + une jointure"

    Les éléments sont les suivants :

    MLD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    compagnie(Num_Co,Nom_Co,Adresse_Co,#Cp_Co)
    avion(Num_Avion, TotalHeures_Avion, #Type_Avion,#Num_Compagnie)
    vol(Num_Vol,DatDep, Duree,#Num_Avion)
    A la suite de la saisie d'un formulaire (création d'un vol) , j'insère dans la relation "vol" : insert into nomtable values (champ1 , etc...)

    Cela fonctionnes , mais je voudrais en fait créer un vol en fonction d'une compagnie.

    Cela serait simple si j'avais une clé étrangère "numéro compagnie" dans vol , donc je suis obligé de passer par une jointure de vol vers avion , et de avion vers compagnie.

    Cependant, si toujours ceci est possible , comment la requete serait faite ?

    J'ai essayé cette solution qui ne fonctionne pas :

    Insert into vol values (...) where (select * from vol,avion,compagnie where jointures)

    Cordialement,

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par Kenshin86
    Cela fonctionnes , mais je voudrais en fait créer un vol en fonction d'une compagnie.
    Désolé, j'ai du mal à voir ce que tu veux faire. Vu que la seule clé etrangère dans vol est Num_Avion, c'est un n° d'avion d'une compagnie donnée que tu voudrais insérer ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Insert into vol values (...) where (select * from vol,avion,compagnie where jointures)
    Ca prête à confusion : je ne vois comment comment tu veux faire une jointure sur un enregistrement que tu es en train de créer (qui n'existe donc pas encore....).

    Quoi qu'il en soit, ce qui est faisable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    insert into vol 
    (select valeur_1, valeur_2, valeur_3, champ_1, champ_2
    from vol, avion, compagnie where ...)
    Avec valeur_1 et valeur_2 les données que tu connaîs (issues de ton formulaire) écrites "en dur" dans la requête, et champ_1 et champ_2 les valeurs que tu veux récupérer dans tes tables.

  3. #3
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Oui , je comprends.

    Meme pour moi , ce n'est pas très clair.

    Je voudrais créer une vol en fonction d'une compagnie (si j'avais la clé étrangère numcompagnie dans vol , il n'u aurait pas eu de soucis)

    Cependant , je suis obligé de vol , passé par le numéro avion de la relation avion qui lui contient une clé étrangère "numcompagnie" qui va me permettre de faire la jointure.


    Je ne sais comment écrire ça.

  4. #4
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    En essayant ce que tu m'a dis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO Vol(DateDep,Duree,HDep,HArr,Num_Aeroport1,Num_Aeroport2,Num_Avion,Num_Pilote1,Num_Pilote2)(Select('" & DatDep.Text & "','" & Duree1 & "','" & HDep.Text & "','" & HArr.Text & "','" & CodeAero1 & "','" & CodeAero2 & "','" & ComboBox3.Text & "','" & CodePil1 & "','" & CodePil2 & "',DateDep,Duree,HDep,HArr,Num_Aeroport1,Num_Aeroport2,Num_Avion,Num_Pilote1,Num_Pilote2) From Vol,Avion,Compagnie Where Vol.Num_Avion=Avion.Num_Avion And Avion.Num_Compagnie=Compagnie.Num_Compagnie And Num_Compagnie='" & Commune.Label3.Text & "') "

    Erreur de syntaxe dans l'instruction INSERT INTO

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 115
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 115
    Points : 28 480
    Points
    28 480
    Par défaut
    La syntaxe exacte est ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO matable (colonnes, ...)
    SELECT valeurs, ....
    FROM ...
    sans parenthèses autour du SELECT

  6. #6
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Ok , je vais essayer ça.

    J'ai testé avec la clé étrangère du numéro compagnie dans la relation vol , et cela fonctionnes , meme si ça fait redondant. Ca restera ma solution de secours.

  7. #7
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Erreur:
    Le nombre de valeurs de la requete doit coincider avec le nombre de champs de destination

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO Vol(DateDep,Duree,HDep,HArr,Num_Aeroport1,Num_Aeroport2,Num_Avion,Num_Pilote1,Num_Pilote2) Select '" & DatDep.Text & "','" & Duree1 & "','" & HDep.Text & "','" & HArr.Text & "','" & CodeAero1 & "','" & CodeAero2 & "','" & ComboBox3.Text & "','" & CodePil1 & "','" & CodePil2 & "',DateDep,Duree,HDep,HArr,Num_Aeroport1,Num_Aeroport2,Num_Avion,Num_Pilote1,Num_Pilote2 From Vol,Avion,Compagnie Where Vol.Num_Avion=Avion.Num_Avion And Avion.Num_Compagnie=Compagnie.Num_Compagnie And Num_Compagnie='" & Commune.Label3.Text & "' "
    Je penses que ce message est logique parce que lors du select (valeurs formulaires + champs de la table) , j'penses qu'il perd un peu la tète à ce niveau puisqu'il y a trop d'arguments dans la clause select .

  8. #8
    Membre averti

    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 418
    Points : 328
    Points
    328
    Par défaut
    Citation Envoyé par al1_24
    La syntaxe exacte est ... sans parenthèses autour du SELECT
    Oups, désolé.

    Citation Envoyé par Kenshin86 Voir le message
    Erreur:
    Le nombre de valeurs de la requete doit coincider avec le nombre de champs de destination

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "INSERT INTO Vol(DateDep,Duree,HDep,HArr,Num_Aeroport1,Num_Aeroport2,Num_Avion,Num_Pilote1,Num_Pilote2) Select '" & DatDep.Text & "','" & Duree1 & "','" & HDep.Text & "','" & HArr.Text & "','" & CodeAero1 & "','" & CodeAero2 & "','" & ComboBox3.Text & "','" & CodePil1 & "','" & CodePil2 & "',DateDep,Duree,HDep,HArr,Num_Aeroport1,Num_Aeroport2,Num_Avion,Num_Pilote1,Num_Pilote2 From Vol,Avion,Compagnie Where Vol.Num_Avion=Avion.Num_Avion And Avion.Num_Compagnie=Compagnie.Num_Compagnie And Num_Compagnie='" & Commune.Label3.Text & "' "
    Je penses que ce message est logique parce que lors du select (valeurs formulaires + champs de la table) , j'penses qu'il perd un peu la tète à ce niveau puisqu'il y a trop d'arguments dans la clause select .
    Ha ben oui, le résultat de la requête doit être au "format" de la table de destination...
    Donc dans le SELET, il ne faut mettre QUE les champs à insérer, dans le même ordre que déclaré dans le INSERT.

    Je ne comprends pas vraiment pourquoi dans ton SELECT tu mets les valeurs constantes récupérées dans ton formulaire, mais aussi les champs de la table vol...
    Il me semble que tu n'as rien à récupérer dans cette table pour ton insertion. Ce qui te manque, c'est juste le n° d'avion. C'est bien ça ?
    Donc la requête devrait plutôt être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO Vol (DateDep,Duree,HDep,HArr,Num_Aeroport1,
         Num_Aeroport2,Num_Pilote1,Num_Pilote2,Num_Avion)
    Select '" & DatDep.Text & "','" & Duree1 & "','" & HDep.Text & "',
         '" & HArr.Text & "','" & CodeAero1 & "','" & CodeAero2 & "',
         '" & CodePil1 & "','" & CodePil2 & "',Num_Avion 
    From Avion,Compagnie
    Where Avion.Num_Compagnie=Compagnie.Num_Compagnie
    And Num_Compagnie='" & Commune.Label3.Text & "' "
    Sauf que là j'ai enlevé le ComboBox3.Text, car je ne vois pas où il intervient...
    Par contre, tu auras autant de nouvel enregistrement dans vol que d'avions différents de ta compagnie. Donc chaque avion de la compagnie effectue un même vol ?? Est-ce bien cela que tu veux ??

  9. #9
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    Le comboBox3.Text est le numéro de l'avion sélectionné.

    La j'ai eu une idée , il suffit de faire un simple insert into values.

    Et après , je ferais ma jointure pour l'affichage , puisqu'un avion fait partie d'une et une seule compagnie.

  10. #10
    Membre régulier
    Inscrit en
    Février 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 271
    Points : 86
    Points
    86
    Par défaut
    C'était bien ça effectivement. Il fallait faire un simple insert into , et comme un avion fait parti d'une et d'une seule compagnie alors pour l'affichage , il faut faire un select avec les jointures.

    Merci

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

Discussions similaires

  1. Requête insert into + jointures
    Par Julien698 dans le forum Développement
    Réponses: 6
    Dernier message: 18/04/2014, 18h26
  2. [MySQL] INSERT INTO et JOINTURE
    Par florianjoy54 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 29/04/2010, 17h35
  3. [AC-2007] Problème de jointure dans INSERT INTO avec INNER JOIN
    Par andy331 dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 16/03/2010, 16h59
  4. [AC-2007] Jointure dans un INSERT INTO
    Par andy331 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 11/03/2010, 00h30
  5. Jointure entre plusieurs requetes INSERT INTO
    Par Bernard67 dans le forum Requêtes et SQL.
    Réponses: 18
    Dernier message: 11/01/2009, 19h42

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