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 :

Copie de colonnes dans une autre table


Sujet :

Requêtes PostgreSQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Copie de colonnes dans une autre table
    Bonjour,

    Je cale toujours sur le même problème Pourtant j’ai appliqué le même script que dans une autre discussion ?

    Voilà je souhaite copier une colonne (juste une pour commencer) -op_placename- d’une table -observation_places- dans une autre table -obs_places_station- uniquement pour les lignes où elles ont le nom en commun, soit observation_places.op_placename = obs_places_station.toponyme

    La colonne op_placename de obs_places_station est vide pour l'instant.

    (L’idée est après d’enlever la colonne toponyme et de faire hériter la table obs_places_station de la table observation_places..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    CREATE TABLE bdsat.obs_places_station
    (
      id_s integer NOT NULL DEFAULT nextval('bdsat.discomi_saumon_gid_seq'::regclass),
      op_gislocation2 character varying(10),
      xl93 double precision,
      yl93 double precision,
      toponyme character varying(255),
      type_station character varying(70),
      "operator" character varying(50),
      river character varying(50),
      date character varying(10),
      the_geom geometry,
      op_id uuid,
      op_gis_systemname character varying(20),
      op_gis_layername character varying(30),
      op_gislocation character varying(15),
      op_placename character varying(255),
      op_no_observationplacetype integer,
      CONSTRAINT discomi_saumon_pkey PRIMARY KEY (id_s),
      CONSTRAINT enforce_dims_the_geom CHECK (st_ndims(the_geom) = 2),
      CONSTRAINT enforce_geotype_the_geom CHECK (geometrytype(the_geom) = 'POINT'::text OR the_geom IS NULL),
      CONSTRAINT enforce_srid_the_geom CHECK (st_srid(the_geom) = 2154)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE bdsat.obs_places_station OWNER TO postgres;
     
     
    CREATE TABLE bdsat.observation_places
    (
      op_id uuid NOT NULL DEFAULT uuid_generate_v4(),
      op_gis_systemname character varying(20),
      op_gis_layername character varying(30),
      op_gislocation character varying(25),
      op_placename character varying(255),
      op_no_observationplacetype integer,
      CONSTRAINT observation_places_pkey PRIMARY KEY (op_id)
    )
    WITH (
      OIDS=FALSE
    );
    ALTER TABLE bdsat.observation_places OWNER TO postgres;
    Ma requête est donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE bdsat.obs_places_station
    INNER JOIN bdsat.observation_places ON obs_places_station.toponyme = observation_places.op_placename
    SET obs_places_station.op_placename = observation_places.op_placename
    WHERE obs_places_station.op_placename IS NULL
    Le message affiché est erreur de syntaxe sur le SELECT mais je ne vois pas d’où cela peut provenir…

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ta condition de jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON obs_places_station.toponyme = observation_places.op_placename
    Ta mise à jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SET obs_places_station.op_placename = observation_places.op_placename
    Autrement dit, la colonne obs_places_station.op_placename va prendre la valeur de obs_places_station.toponyme.
    Tu n'as donc pas besoin de la jointure !
    Et si ta colonne à mettre à jour est entièrement vide, le WHERE est inutile !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    UPDATE bdsat.obs_places_station
    SET obs_places_station.op_placename = obs_places_station.toponyme
    Et je ne vois pas trop l'intérêt de dupliquer cette colonne !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Oui merci effectivement il n’y a pas trop d’intérêt sur cette colonne Mais en fait je souhaiterais rajouter une colonne op_id dans ma table obs_places_station à partir de la table observation_places Et donc uniquement pour les lignes avec le même nom soit obs_places_station.toponyme = observation_places.op_placename
    J’ai rajouté une colonne op_id dans la table obs_places_station Elle est vide et c’est celle-là que je souhaiterais compléter avec les données de la table observation_places
    Et ca je n’y arrive pas

    La requête devrait être celle-là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE bdsat.obs_places_station
    INNER JOIN bdsat.observation_places ON obs_places_station.toponyme = observation_places.op_placename
    SET obs_places_station.op_id = observation_places.op_id
    Mais cela me met Erreur de syntaxe sur l’Inner join..

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 31/10/2012, 08h50
  2. [MySQL] mysql copier une colonne dans une autre table
    Par runcafre91 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/02/2010, 08h56
  3. Copie d'une colonne dans une autre table
    Par norfaulk dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 31/03/2009, 19h57
  4. Importer données d'une colonne dans une autre table
    Par Monkey_D.Luffy dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 17/06/2008, 16h08
  5. Copie de colonnes de plusieures tables dans une autre table
    Par PPLILH2008 dans le forum Modélisation
    Réponses: 3
    Dernier message: 04/06/2008, 15h09

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