Vous n'êtes pas identifié(e).
Pages : 1
Effectivement c'est ce qui pose problème pour la table fonction !!
Comment forcer l'insertion des colonnes nulles sur postgres ??
Pourquoi : "la condition de jointure ci-dessus est fausse dès qu'une seule colonne est à NULL" ?
Merci pour votre réponse.
Les lignes de employeur & fonction ne peuvent pas être nulles, par contre une colonne peut être nulle.
J'aimerais une jointure qui accepte les lignes nulles de la table agro car, comme je l'ai dit, la base étant tellement mal remplie, je peux avoir les informations associées aux contrats mais pas à l'employeur. C'est pour ça que je pensais un LEFT JOIN adapté, mais je me trompe peut-être....?
Pour votre dernier point : "quand on a une correspondance sur toutes ces colonnes, quelle est la garantie qu'il y a une seule ligne qui correspond dans fonction (resp. employeur) ? Autrement dit est-ce qu'il y a un index unique (clef composite) sur l'ensemble de ces colonnes? S'il peut y avoir plusieurs lignes correspondantes, ça va poser un problème de multiplication des lignes à insérer."
Effectivement, ça risque de poser problème car il n'y a pas la garantie d'unicité pour les lignes... Mais comment rajouter un index unique pour éviter la multiplication des lignes à insérer ?
Hm, après réflexion je pense que une jointure LEFT JOIN serait plus appropriée (car dans ma table employeur j'ai fait en sorte qu'il n'y ait aucune ligne nulle or il est possible - tellement la base est mal remplie - que j'ai l'information du contrat alors même que je n'ai pas d'employeur).
Après avoir inséré étape par étape dans la table contrat pour voir où se situait le problème, l'insertion bug effectivement à partir de fonction et d'employeur.
Est-ce que cela peut être lié au fait que parfois des lignes peuvent être les mêmes ? Du coup, lorsque je lui dit d'insérer quand employeur.col1 = agro.col1, employeur.col2 = agro.col2, etc., il se mélange les pinceaux ?
Je sais pas, au secours aidez-moi........................................
Merci pour votre réponse.
Je ne suis pas super au clair avec les jointures je crois. En fait, j'ai créé la table employeur de manière à ce qu'il n'y ait aucune ligne de ma table entièrement nulle, ce qui fait qu'il y a moins de lignes que dans la table agro. J'ai procédé de la même manière pour la table fonction.
Bien que toutes les tables (contrat, fonction, employeur) aient des informations liées, le manque de données à disposition fait que j'ai parfois pour un étudiant aucune information dans la table fonction mais des infos dans la table contrat ou employeur. Ce pourquoi j'ai opté pour un FULL JOIN. Avec ce type de jointure, j'ai l'impression de ne perdre aucune informations mais par contre il est vrai qu'il y a beaucoup de NULL dans la table contrat.
J'espère avoir été claire...
Bonjour,
J'ai un petit soucis lors de mon insertion entre mes deux tables. J'ai une table employeur et une table contrat que j'alimente à partir d'une table générique "agro" qui contient l'intégralité des données (récupérées à partir d'un csv).
La table contrat contient une clé étrangère "employeur" reliée à la table employeur.
L'insertion de ma table employeur fonctionne parfaitement et celle de ma table contrat aussi : toutes les informations sont bonnes lorsque je fais des tests sur la table uniquement. Néanmoins, lorsque je fais des tests avec jointure des tables contrat et employeur les résultats obtenus sont bons mais incomplets (au lieu de me retourner 16 personnes qui ont travaillé dans les ONG par exemple, il m'en retourne que 7).
Je me dis que ce qui pêche ce doit être lors de l'insertion des valeurs dans la table contrat ... Voici ma requete d'insertion dans la table :
INSERT INTO "contrat"(pays, etudiant, employeur, fonction, type_contrat1, type_contrat2, annee_contrat, montant_salaire, secteur_niv1, secteur_niv2, temps_recherche, insertion)
SELECT pa."id", e."id", emp."id", f."id", inser_pro_type_contrat_niv1,
inser_pro_type_contrat_niv2, inser_pro_annee_contrat, inser_pro_salaire, inser_pro_secteur_activite_niv1, inser_pro_secteur_activite_niv2, inser_pro_temps_recherche_emploi, true
FROM "agro" as ag
LEFT JOIN "pays" pa ON pa.pays = ag.inser_pro_pays
INNER JOIN "etudiant" e ON e."id" = ag."id"
FULL JOIN "fonction" f ON f.fonction_niv1 = ag.inser_pro_fonction_niv1 AND f.fonction_niv2 = ag.inser_pro_fonction_niv2 AND f.intitule_exact = ag.inser_pro_fonction_intitule_exact AND f.statut = ag.inser_pro_statut
FULL JOIN employeur emp ON ag.inser_pro_organisme_nom = emp.nom_organisme AND ag.inser_pro_type_employeur_niv1 = emp.type_employeur_niv1 AND ag.inser_pro_type_employeur_niv2 = emp.type_employeur_niv2 AND ag.inser_pro_taille_structure_niv1 = emp.taille_structure_niv1 AND ag.inser_pro_taille_structure_niv2 = emp.taille_structure_niv2
WHERE (inser_pro_type_contrat_niv1 IS NOT NULL OR inser_pro_type_contrat_niv2 IS NOT NULL OR inser_pro_annee_contrat IS NOT NULL OR inser_pro_salaire IS NOT NULL OR inser_pro_secteur_activite_niv1 IS NOT NULL OR inser_pro_secteur_activite_niv2 IS NOT NULL OR inser_pro_temps_recherche_emploi IS NOT NULL);
pays, etudiant, employeur, fonction sont donc des clés étrangères ; les autres valeurs sont récupérées à partir de ma table agro.
Y aurait-il une erreur dans mon insertion que je ne vois pas ??
Merci de m'aider....
Bonne journée à vous!
Pages : 1