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 enregistrement si il n'existe pas


Sujet :

SQL Firebird

  1. #1
    Membre régulier
    INSERT enregistrement si il n'existe pas
    salut j'ai un table etudiantes contient 3 enregistrements (clé primaire est: N_INSCRIPTION)

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    INSERT INTO Table02 (N_INSCRIPTION)
    SELECT N_INSCRIPTION FROM etudiantes
    WHERE CODE_Specialite='info'
    AND sex='m'


    l’exécution de cette requête est bient

    Mais quand j'ajoute le quatrième enregistrement dans la table etudiantes et exécuter la requête ça ne marche pas
    car les 3 enregistrements Ils ont été précédemment ajoutés au tableau (Table02) (violation of PRIMARY or UNIQUE KEY constraint) c'est ça le problème

    Comment ajouter les nouveaux enregistrements qui ont été ajoutés ?
    J'ai fait cette requête pour essayer mais cela n'a pas fonctionné
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    INSERT INTO Table02 (N_INSCRIPTION)
    SELECT N_INSCRIPTION FROM etudiantes
    WHERE CODE_Specialite='info'
    AND sex='m'
     
     Where Not Exists
           (
             Select N_INSCRIPTION
               From Table02
           );
    Delphi installés : RAD Studio 10.4 ..........Programme VCL
    SGBD : Firebird 2.5
    générateurs Etats : FastReport, QuickReport
    OS : Window 7 64bit

  2. #2
    Modérateur

    Citation Envoyé par delphi2019 Voir le message
    J'ai fait cette requête pour essayer mais cela n'a pas fonctionné
    Tu reçois un message d'erreur ?
    L'insertion ne s'effectue pas ?
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  3. #3
    Membre régulier
    Un message d'erreur s'affiche car la requête contient deux where
    Delphi installés : RAD Studio 10.4 ..........Programme VCL
    SGBD : Firebird 2.5
    générateurs Etats : FastReport, QuickReport
    OS : Window 7 64bit

  4. #4
    Membre éprouvé
    Bonjour,

    Il me semble que si tu présentais ta requête ainsi, elle fonctionnerait :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    INSERT INTO Table02 a (N_INSCRIPTION)
    SELECT N_INSCRIPTION FROM etudiantes
    WHERE 
       CODE_Specialite='info'
       AND sex='m'
       AND Not Exists ( Select * From Table02 b WHERE a.N_INSCRIPTION = b.N_INSCRIPTION );


    N'ayant pas la présentation des tables de la base, il est possible qu'il reste quelques détails à solutionner, mais le principe est là.
    Faire attention aux alias. J'ai fait des ajouts avec les alias a et b.
    Bon courage.

  5. #5
    Modérateur

    Petite correction sur la requête de seabs :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO Table02 (N_INSCRIPTION)
    SELECT N_INSCRIPTION FROM etudiantes a
    WHERE 
       CODE_Specialite='info'
       AND sex='m'
       AND Not Exists ( Select * From Table02 b WHERE a.N_INSCRIPTION = b.N_INSCRIPTION );

    Sinon tu peux aussi écrire :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    INSERT INTO Table02 (N_INSCRIPTION)
    SELECT N_INSCRIPTION FROM etudiantes
    WHERE CODE_Specialite='info'
    AND sex='m'
    AND N_INSCRIPTION Not In
            ( Select N_INSCRIPTION
               From Table02
           );
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

  6. #6
    Membre régulier
    merci C'est la solution
    Delphi installés : RAD Studio 10.4 ..........Programme VCL
    SGBD : Firebird 2.5
    générateurs Etats : FastReport, QuickReport
    OS : Window 7 64bit

  7. #7
    Modérateur

    J'avais oublié une troisième solution :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    INSERT INTO Table02 (N_INSCRIPTION)
    SELECT  N_INSCRIPTION
    FROM    etudiantes
    WHERE   CODE_Specialite='info'
        AND sex='m'
    EXCEPT
       Select  N_INSCRIPTION
       From    Table02
    ;
    Cette signature n'a pas pu être affichée car elle comporte des erreurs.

###raw>template_hook.ano_emploi###