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

Requêtes MySQL Discussion :

Insert en SQL


Sujet :

Requêtes MySQL

  1. #1
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut Insert en SQL
    Coucou,

    J'ai une requete de insert Sql toute bete avec un petit select à l'interieur mais elle ne veut pas fonctionner, et je dois bien avouer que j'ai épuisé les solutions que j'avais en rserve ... Vous en avez de votre coté ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO depenses (idDepense,idAuteur,dateDepense,intituleDepense,idType,montantDepense,idDevise)
    '',SELECT idAuteur FROM auteurs where nomAuteur='toto','','','','',''
    Une erreur de synthaxe apparait ....

    D'avance merci.

    Matt

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Citation Envoyé par keaton2000 Voir le message
    Coucou,


    INSERT INTO depenses (idDepense,idAuteur,dateDepense,intituleDepense,idType,montantDepense,idDevise)
    '',SELECT idAuteur FROM auteurs where nomAuteur='toto','','','','',''

    Matt

    Il manque le VALUES

    de plus ton select(si on enlève les ,"")ne retournera q'un seul élément(idAuteur), or tu en réclames 7

  3. #3
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    Il me semble pourtant qu'il y a plusieurs synthaxes pour le insert, dont une qui accept qu'on ne mette pas de VALUES.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO depenses (idDepense,idAuteur,dateDepense,intituleDepense,idType,montantDepense,idDevise)
    '',SELECT idAuteur FROM auteurs where nomAuteur='toto','','','','',''
    La dedans, pour moi, je demande 7 champs idDepense,idAuteur ...
    et j'en renseigne 6 vide sauf le 2eme ou je fais une sorte de requete imbriquee avec mon select, qui ne retourne qu'une valeur, la 7eme.

    Pourquoi me dis-tu que je ne renseigne qu'un champ ?

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ta requête semble bonne mais puisque tu ne renseignes que l'auteur, pourquoi indiquer toutes les colonnes ?
    Ce qui pose problème est probablement le fait que tu essaies d'insérer une chaîne vide dans un champ idDepense qui doit logiquement être un entier auto-incrémenté.

    Ta sous requête ne va effectivement retourner qu'un seul auteur alors utilises VALUES puisque tu n'insères qu'une seule ligne.
    La syntaxe INSERT ... SELECT est plutôt réservée à l'insertion de plusieurs lignes d'un coup.

    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO depenses(idAuteur)
    VALUES(SELECT idAuteur
      FROM auteurs
      WHERE nomAuteur = 'toto'
    )
    Si idDepense est bien un entier auto-incrémenté, il se remplira tout seul.

    Au fait, c'est bizarre de n'insérer que l'auteur dans ta table de dépenses quand même !

    Et puis au passage :
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    MySQL a réponduocumentation
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT idAuteur
    FROM auteurs
    WHERE nomAuteur = 'toto'
    )' at line 2
    C'est pareil ...

    Oui, c'est bizarre qu'un seul champ soit renseigne, mais c'est simplement que je compte completer les requêtes des autres champs quand ca marchera avec une ... ce qui n'est pas le cas ...

    La syntaxe INSERT ... SELECT est plutôt réservée à l'insertion de plusieurs lignes d'un coup
    Plusieurs lignes ou plusieurs champs ? C'est ptet ca le soucis ?

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Et sans VALUES ni les parenthèses ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Et dans un éditeur SQL, que donne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    SELECT idAuteur
      FROM auteurs
      WHERE nomAuteur = 'toto'

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Par défaut
    Bonjour tlm

    as tu essayé

    insert into depenses set idAuteur=(SELECT idAuteur FROM auteurs where nomAuteur='toto')

    ?

  9. #9
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    En fait, dans le rush, j'ai fait differemment, j'ai ajoute directement mon id dans le formulaire, ce qui m'evite des requete alambiquees ... solution de facilite certes, mais de rapidite ...

    Je testerai vos solution quand meme quand j'aurai un moment, parce que c'est quand meme pas normal que ca n'ai pas marche et j'aime pas quand ca marche pas !!!

    Merci pour votre interet en tous cas, je reviens vers ce post sous peu.


  10. #10
    Membre très actif
    Avatar de keaton7
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    743
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 743
    Par défaut
    Tiens je repasse par la, et en relisant le code, un truc me saute aux yeux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT idAuteur,nomAuteur
      FROM auteurs
      WHERE nomAuteur = 'toto'
    nomAuteur etait pas selectionne dans le SELECT, SQL risquait pas de le trouver dans le WHERE ...

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

Discussions similaires

  1. DBI et BULK INSERT sur SQL Server
    Par elvivo dans le forum SGBD
    Réponses: 4
    Dernier message: 25/04/2006, 23h47
  2. PB exécution insertion dans sql server
    Par Yanmeunier dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/11/2005, 16h44
  3. Créer un trigger "before insert" avec SQL Server
    Par bubi dans le forum Développement
    Réponses: 2
    Dernier message: 14/11/2005, 10h12
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. Réponses: 4
    Dernier message: 13/04/2004, 19h12

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