Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/01/2011, 11h33   #1
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
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 :
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 :
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…
Gaetgaet78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2011, 13h35   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 10 980
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 10 980
Points : 18 224
Points : 18 224
Envoyer un message via MSN à CinePhil
Ta condition de jointure :
Code :
ON obs_places_station.toponyme = observation_places.op_placename
Ta mise à jour :
Code :
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 :
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 de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/01/2011, 09h03   #3
Invité de passage
 
Inscription : décembre 2010
Messages : 6
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 6
Points : 1
Points : 1
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 :
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..
Gaetgaet78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h23.


 
 
 
 
Partenaires

Hébergement Web