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

SQL Firebird Discussion :

[INSERT][SELECT] insert avec un select imbriqué


Sujet :

SQL Firebird

  1. #1
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut [INSERT][SELECT] insert avec un select imbriqué
    bonjour,
    je souhaiterais faire quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into entry values(gen_id(IDENT, 1), 'TODAY', '11111111', 'ESPECE', '', 'écriture 1', 55, 'DEBIT', 'NON', select id from account where label='sct A');
    Mais, cette écriture ne passe pas.
    Comment pourrais-je arriver au même résultat s'il vous plait ?

    merci.

  2. #2
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    70
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 70
    Points : 84
    Points
    84
    Par défaut
    Sans être expert dans les requêtes SQL, on peut ajouter une valeur dans un insert à partir d'une requête ?

    Bon, on retraillve la requête un peu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into entry values('TODAY', '11111111', 'ESPECE', '', 'écriture 1', 55, 'DEBIT', 'NON', TA_VALEUR_TROUVÉE);
    J'ai enlevé le générateur. L'idéale, tu te crées un trigger before insert et tu écris ce code là

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
       if (new.champ1 is null) then
       {
           new.champ1 = gen_id(IDENT, 1)
       }
    Pour ta valeur trouvé par requête. je la séléctionenrais avant et je la metterais dans une variable. Tu peux sois le faire à partir de ton application ou d'une procédure stockée.

  3. #3
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: [INSERT][SELECT] insert avec un select imbriqué
    Citation Envoyé par narmataru
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into entry values(gen_id(IDENT, 1), 'TODAY', '11111111', 'ESPECE', '', 'écriture 1', 55, 'DEBIT', 'NON', select id from account where label='sct A');
    Tu ne peux pas mixer des valeurs avec un select, c'est soit l'un soit l'autre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MaTable (Col1, Col2, Col3) values ('MaValeur', 12345, 'TODAY');
    oubien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into MaTable (Col1, Col2, Col3) values select ColA, ColB, ColC from AutreTable where ColD='Toto';
    Cependant rien ne t'empéche de ruser...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into entry (Mieux, Vaux, Preciser, Le, Nom, De, Tes, Dix, Colonnes) values select gen_id(IDENT, 1), 'TODAY', '11111111', 'ESPECE', '', 'écriture 1', 55, 'DEBIT', 'NON',  id from account where label='sct A';

  4. #4
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    hé ben toi on peux dire que t'es un ptit filou
    tu l'as bien eut l'interbase
    merci j'essaye ça demain

    merci aussi ton tes indications Dihap

    bonne soirée....

  5. #5
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    salut,
    tu es sure que ça marche ta petite ruse Barbibulle ? Moi j'y arrive pas

    si je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select id from account where label='sct A';
    il me renvoie bien '1', mais si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into monthlyEntry values (gen_id(IDENT, 1), 1, 'mensuel 7', 0.25, 'CREDIT', 'VIREMENT', id from account where label='sct A', 10);
    j'ai une erreur...

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    regarde un peux mieux ce que j'ai écrit, tu y verra un mot caché...
    tu as oublié le select juste apres le values.

    Et deuxième remarque il est préfèrable de préciser le nom des colonnes dans ton ordre insert (sinon il prend l'ordre des colonnes de ta table et donc ca va marché jusqu au jour ou tu vas ajouter ou enlever une colonne... alors que si tu précises les noms, tu n'est plus tributaire de cet ordre ni des colonnes non obligatoire que tu ajouterai plus tard dans ton projet...) bref c'est une question de maintenance, ca te donnera moins de travail plus tard et ton ordre insert sera plus comprehensible car en le lisant tu voix à quoi correspond les données que tu inseres.

  7. #7
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    oups
    merci Barbibulle
    Mais toi aussi tu fais des erreurs, on ne peut pas avoir 'insert into ... values select ....' mais 'insert into ... select ....'

    un ptit exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into monthlyEntry (id, execDay, label, amount, flow, payement, lastExecMonth, accountid) select gen_id(IDENT, 1), 1, 'mensuel 7', 0.25, 'CREDIT', 'VIREMENT', 10, id from account where label='sct A';
    en tout cas merci beaucoup,
    bonne journée...

  8. #8
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Bien entendu il n'y a pas le values quand on fait un select, désolé pour cette erreur...
    mais heureux que tu ais réctifié par toi meme et mieux encore que tu en ai fait profité les autres !!
    Merci

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 49
    Points : 27
    Points
    27
    Par défaut MÊME CHOSE AVEC UN SELECT MULTIPLE
    Bonjour

    Peut-on faire la même chose avec un SELECT donnant plusieurs lignes comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO table1
     (listid, subid, subdate,unsubdate,`status`)
    VALUES SELECT '1', s.subid, 'TODAY', NULL, '1'
    FROM table2 s
    LEFT JOIN table1 l on s.subid = l.subid
    WHERE l.listid IS NULL;
    En l'état j'obtiens une erreur syntaxe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #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 '1', s.subid, 'TODAY', NULL, '1'
    FROM `table2` s
    LEF' at line 3
    Mais je ne vois pas l'erreur de syntaxe.

  10. #10
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 092
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 092
    Points : 41 067
    Points
    41 067
    Billets dans le blog
    62
    Par défaut
    the manual that corresponds to your MySQL server version
    euh , je croyais qu'on était sur FireBird ??
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Points : 12
    Points
    12
    Par défaut Réponse supplémentaire
    Il existe bien une syntaxe pour combiner un INSERT SELECT + des valeurs fixes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO ma_table (id, name, valeur_fixe) 
    SELECT  id, name, 'ma valeur fixe' FROM mon_autre_table WHERE .....
    En espérant que ça serve ;-)

    Benjamin.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Yoshhhh
    Merciiiiiiii! ca fait des heures que je cherche sans succes jusqu'a ce que je tombe sur ce sujet !
    Merci Benjamin!
    et merci a tous les autres !

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/12/2014, 15h19
  2. [Drupal] Champ select Webform avec une selection dynamique de données issues d'un autre noeud
    Par Jamit dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 15/10/2012, 11h17
  3. insertion d'une liste de selection effectuée avec checkox
    Par adebo dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/12/2011, 14h04
  4. insert avec un select imbriqué
    Par sebastien00 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/06/2008, 12h45
  5. [struts][JSP][select] problème avec le select
    Par redge_touch dans le forum Struts 1
    Réponses: 4
    Dernier message: 14/01/2004, 10h05

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