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 PostgreSQL Discussion :

[ERROR : FOREIGN KEY] sur des champs différents


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut [ERROR : FOREIGN KEY] sur des champs différents
    Salut,

    J'essaye de faire un requête (un ajout de contrainte sur une base existante) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE ONLY admin.eleve_mandat ADD CONSTRAINT besoin1_id FOREIGN KEY (besoin1_id) REFERENCES admin.besoin(besoin_id);

    Et comme les noms sont différents alors je me tape cette erreur :

    ERREUR: une instruction insert ou update sur la table « eleve_mandat » viole la contrainte de clé
    étrangère « besoin1_id »
    État SQL :23503
    Détail :La clé (besoin1_id)=(27) n'est pas présente dans la table « besoin ».

    Quelqu'un pourrait il m'aider ? En plus j'ai presque que des cas comme ça dans la base .. Et je suis coincé .. J'ai rien trouvé chez Google ..


    Merci d'avance pour votre contribution

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 205
    Par défaut Reponse
    C'est la clé 27 (d'où le (27)) qui est inexistante dans besoin_id

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Salut,

    Le message signifie que dans ta table admin.eleve_mandat, dans la colonne besoin1_id, tu as la valeur 27 et que cette valeur n'existe pas dans la colonne besoin_id de la table admin.besoin.
    Pour qu'une clé étrangère fonctionne, il faut que toutes les valeurs présentes dans la colonne clé étrangère soient également présentes dans la colonne de la table référencée.

    Pour lister les valeurs qui sont dans besoin1_id (de la table admin.eleve_mandat) et pas dans dans besoin_id (de la table admin.besoin), et qui sont susceptibles de générer la même erreur, tu peux essayer la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT besoin1_id
    FROM admin.eleve_mandat AS em
    LEFT JOIN admin.besoin AS b ON em.besoin1_id = b.besoin
    WHERE b.besoin IS NULL
    Il faudra alors ajouter tous les id manquants dans la table admin.besoin.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre émérite Avatar de Oishiiii
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2009
    Messages
    508
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Août 2009
    Messages : 508
    Par défaut
    Bonsoir,

    Vous essayez d'appliquer une contrainte qui dit que toute valeur de la colonne besoin1_id de la table eleve_mandat doit faire référence à une valeur présente dans la colonne besoin_id de la table besoin.

    PostgreSQL est très explicite au niveau de ses messages d'erreur (contrairement à MySQL par exemple).

    On voit ici clairement que votre colonne besoin1_id viole la contrainte.
    La valeur 27 n'est pas présente dans la table besoin.

    Pour appliquer la contrainte avec succès il faut d'abord nettoyez vos tables en supprimant ces lignes orphelines, ces anomalies qui ne seraient jamais apparues si la contraintes avait été appliqué à la création de la table avant d'y insérer des lignes.

    Pour trouver toutes les valeurs présentes dans besoin1_id et qui ne sont pas dans la colonne besoin_id vous pouvez lancer cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT besoin1_id
    FROM eleve_mandat
    WHERE NOT EXISTS (
      SELECT NULL
      FROM besoin
      WHERE besoin.besoin_id = eleve_mandat.besoin1_id
    );
    Grillé 2 fois, c'est pas grave

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

Discussions similaires

  1. [AC-2010] Compter des enregistrements selon 2 critères sur 2 champs différents
    Par nlbmoi dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 03/07/2015, 10h10
  2. Emuler une foreign key sur des tables pseudo-héritées
    Par gorgonite dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 11/01/2013, 16h25
  3. [AC-2003] Regle de validation sur des champs dates dans des tables différentes
    Par ingal30 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2010, 18h42
  4. liste combo box s'appuyant sur des champs différents
    Par Vincent_59 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 02/08/2007, 14h10
  5. [MySQL] Exclusion sur des champs de 2 tables différentes
    Par bermu01 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/11/2006, 23h25

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