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

Langage SQL Discussion :

Insérer dans une table les données d'une autre table


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Grèce

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Insérer dans une table les données d'une autre table
    Bonjour,
    Je m'arrache les cheveux depuis ce matin sur cette question, et je ne trouve pas la solution. Je travaille avec pgAdminIII, je souhaite écrire une requête SQL pour travailler mes tables.
    (image en pièce jointe à l'appui)
    Je possède une première table qui possède toutes les données attributaires qu'il me faut sauf les formes géométriques (colonne "the_geom") qui m'intéressent. -> PARCELLES
    Je possède une deuxième table qui possède toutes les formes géométriques "colonne "the_geom") qu'il me faut sauf les données attributaires qui m'intéressent. -> PARCELLES2
    Je vous le donne en mille, je souhaite compléter ces deux problèmes. Sachant qu'il y a le même nombre de lignes de données et que les identifiants uniques ("ID") correspondent.
    J'ai essayer de faire des requêtes INSERT INTO mais les données se mettent à la suite (avant l'insertion, j'ai 478 lignes, après l'insertion, j'en ai 2 x 478). J'ai aussi essayé des requêtes UPDATE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE PARCELLES 
    SET the_geom
    VALUES 
    SELECT the_geom
    FROM PARCELLES2
    Mais je me trompe dans la formulation de ma requête. C'est certain.
    Merci d'avance à ceux qui me sortiront de cette situation embarrassante.

    Winsclav
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 105
    Points : 28 397
    Points
    28 397
    Par défaut
    Tu trouveras ici un bon début de réponse à ton problème.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Grèce

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci al1_24, mais je ne vois pas trop en quoi cela va m'aider.
    Dans ces exemples, il est question d'insérer la même valeur pour chaque ligne. Dans mon cas, chaque ligne sera différente.
    Ou je lis de travers ?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 105
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 105
    Points : 28 397
    Points
    28 397
    Par défaut
    Ces exemples te donnent déjà la syntaxe standard d'une commande UPDATE...

    Tu ne précises pas quel SGBD tu utilises.
    Peut-être propose-t-il une syntaxe particulière pour les UPDATE d'une table à une autre ?

    Sinon le principe est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE  table_cible   tgt
    SET     colonne_mise_a_jour =   (   SELECT  src.expression
                                        FROM    table_source  src
                                        WHERE   src.identifiant_src = tgt.identifiant_tgt 
                                    )
    WHERE   EXISTS
            (   SELECT  src.expression
                    FROM    tbl_source  src
                    WHERE   src.identifiant_src = tgt.identifiant_tgt 
            )
    ;
    Cette requête fonctionne à la condition qu'il existe au plus une ligne dans la table source en correspondance avec une ligne de la table cible (sinon comment le SGBD pourrait il choisir la valeur à prendre en compte ? au hasard ?)
    La restriction WHERE EXISTS... assure qu'on ne mette à jour que les lignes de la table cible qui ont une correspondance dans la table source.

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Grèce

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update "PARCELLES"
    set "the_geom" = (select "the_geom" from "PARCELLES2" where "ID"."PARCELLES2"="ID"."PARCELLES")
    where exists
    (select "the_geom" from "PARCELLES2" where "ID"."PARCELLES2"="ID"."PARCELLES")
    ;
    Réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ERROR:  missing FROM-clause entry for table "ID"
    LINE 2: ...eom" = (select "the_geom" from "PARCELLES2" where "ID"."PARC...
                                                                 ^
     
     
    ********** Erreur **********
     
    ERROR: missing FROM-clause entry for table "ID"
    État SQL :42P01
    Caractère : 80
    J'utilise PostgreSQL et PostGIS pour avoir une visualisation sur QGIS et mettre à jour les données directement depuis ce dernier.
    Je vais continuer à y réfléchir pendant la soirée.
    Merci pour ton suivi.

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Je ne suis pas un expert en postgres, mais généralement il faut faire table.colonne et non colonne.table.
    Tous ces guillemets sont-ils vraiment nécessaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE PARCELLES
    SET the_geom = COALESCE((SELECT the_geom FROM PARCELLES2 WHERE PARCELLES2.id=PARCELLES.id),the_geom)

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 896
    Points : 53 126
    Points
    53 126
    Billets dans le blog
    6
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE PARCELLES 
       SET the_geom = T.the_geom
    WHERE  ID IN (SELECT ID
                  FROM   PARCELLES2 AS T);
    Ce genre d'exemple d'UPDATE avec sous requête est donné dans mon livre sur SQL.

    A +

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Grèce

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2012
    Messages : 4
    Points : 2
    Points
    2
    Par défaut [Résolu]
    Merci les gars.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update "PARCELLES"
    set "the_geom" = (select "the_geom" from "PARCELLES2" where "PARCELLES2"."ID"="PARCELLES"."ID");
    C'était bien un problème d'écriture. C'est table.champs et non champs.table. Je retourne à mes cahiers.
    Bonne journée à tous.

    Winsclav

  9. #9
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    C'était bien un problème d'écriture. C'est table.champs et non champs.table. Je retourne à mes cahiers.
    Tu pourras y copier 100 fois ceci :
    Les champs sont à la campagne ou dans les formulaires, pas dans les tables SQL qui ne sont composées que de colonnes et de lignes.

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

Discussions similaires

  1. [AC-2010] Afficher dans un formulaire les données d'une autre table
    Par GéraldineB dans le forum IHM
    Réponses: 4
    Dernier message: 23/02/2015, 09h08
  2. [AC-2007] Afficher dans un formulaire les données d'une table MySQL
    Par amazon dans le forum VBA Access
    Réponses: 2
    Dernier message: 26/08/2009, 11h37
  3. enregister dans un tableau les données d'une table
    Par warning dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/10/2008, 16h10
  4. Enregistrer les données d'une requête SQL Query sur une autre table
    Par LE MAHJONG dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/09/2008, 20h02
  5. Récuperer les données d'une base de donnée via ODBC dans une variable
    Par arogues dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 04/04/2008, 15h27

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