banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 07 March 2023 16:39

Kiecane
Participant actif
Date d'inscription: 31 Oct 2021
Messages: 91

insertion clés étrangères et shape

Bonjour,

Je dois réaliser une insertion de données de mes tables format shapefile dans une base de données et je rencontre certaines difficultés. Je tiens par ailleurs à préciser que je suis novice dans le domaine.

Ces tables .shp sont structurées de manière identique (il y a une table par année) et leur contenu doit majoritairement être intégré à trois tables distinctes de la base de données qui constituent les trois tables principales de cette dernière. Je suis partie du principe qu’il fallait réaliser les insertions table par table dans la bdd et shape par shape.  Ce qui me pose problème, c’est l’insertion des champs des tables attributaires de mes .shp qui correspondent à des fk (clés étrangères) dans ma base de données. Autrement dit, dans une table .shp, je vais avoir des champs qui correspondent à une clé étrangère dans la table cible dans laquelle je souhaite insérer mes données. Malheureusement j’ai beaucoup de mal à construire un code pour obtenir le résultat attendu. J’ai conçu un code avec la structure suivante :

INSERT INTO table_cible
(
    champ1_tc,
    champ2_tc,
    champ3_tc,
    fk_champ4_tc,
    insertion
)
SELECT
    champ1_shp
    champ2_shp,
    champ3_shp,
    probleme,
    'ajout'
FROM couche_shp


C’est au niveau de "problème" ci-dessus que je rencontre une difficulté : j’ai pensé à faire une double jointure mais cela ne fonctionne pas. Voici la double jointure que j’ai créée :

WITH jointure AS (
        SELECT *
        FROM couche_shp
        INNER JOIN table_dico
        ON couche_shp.culture=table_dico.culture
        )
SELECT *
FROM table_cible
INNER JOIN jointure
ON num_parcelle = jointure.num_parcelle
WHERE insertion = 'ajout'


sachant que sur la table issue du dernier SELECT * ci-dessus, je souhaite obtenir l’entier associé au type de culture c’est-à-dire id_culture qui est présent dans cette table et qui provient de table_dico (table de type dictionnaire). Il manque donc une ligne de plus, soit :

SELECT id_culture FROM table_issue_du_dernier_select

mais je ne peux pas enchaîner deux WITH à la suite car cela me crée une erreur.

Pourriez-vous m’indiquer la structure du code me permettant de répondre à cette problématique s’il-vous-plaît ? N'hésitez pas à m'indiquer si je dois vous apporter plus de précisions, sachant que par soucis de confidentialité je ne pourrais pas le faire de manière trop détaillée.


Cordialement.

Hors ligne

 

Pied de page des forums

Powered by FluxBB