Select all except

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Select all except

MaudC
Bonjour,

Je ne sais pas comment écrire la requête suivante :

CREATE TABLE DEP5000 as SELECT a.the_geom, a.id, b.* EXCEPT the_geom from DEP_5000 a, DEPARTEMENT b where ST_INTERSECTS(a.the_geom,b.the_geom);

Je souhaite sélectionner tous les champs de la table b sauf le champ the_geom.

Malgré l'aide trouvée : http://doc.orbisgis.org/en:4.0:sqllanguage:sqlcommands:select#parameters

J'ai essayé plusieurs alternatives, mais sans succès ! D'habitude j'écrivais tous les champs de la table b que je voulais garder, mais là il y en a beaucoup ! Merci pour votre aide.

Cordialement,

Maud
Reply | Threaded
Open this post in threaded view
|

Re: Select all except

Gwendall Petit
Administrator
Bonjour Maud,

Il semble effectivement qu'il y ai un soucis.

En fait, il est possible de faire
SELECT * EXCEPT (my_field) FROM my_layer;
et également
SELECT a.* EXCEPT (my_field_1, my_field_2) FROM my_layer a;
Par contre je n'arrive pas (comme toi) à faire
SELECT a.* , b.* EXCEPT (my_field_1, my_field_2) FROM my_layer_1 a, my_layer_2 b;
A mon avis il sagit d'un bug avec la grammaire.

En attendant qu'on résolve ce problème, peut-être peux-tu contourner le problème en faisant quelque chose comme suit :
-- On fait la jointure entre les deux tables, lorsque les géométries se supperposent
-- On ne conserve que l'identifiant des DEPARTEMENTS
CREATE TABLE tmp1 as SELECT a.the_geom, a.id, b.id AS id_dept FROM DEP_5000 a, DEPARTEMENT b where ST_INTERSECTS(a.the_geom,b.the_geom);

-- Dans la couche DEPAREMENT on sélectionne tout sauf la géométrie
CREATE TABLE tmp2 AS SELECT * EXCEPT (the_geom) FROM DEPARTEMENT;

-- On unifie les deux tables via l'identifiant des DEPARTEMENT
CREATE TABLE DEP5000 as SELECT a.*, b.* FROM tmp1 a, tmp2 b WHERE a.id_dept=b.id;

-- Optionnellement
DROP TABLE tmp1 PURGE;
DROP TABLE tmp2 PURGE;
Oui je sais c'est pas très propre ... mais à mon avis ça devrait marcher.

Cordialement

Gwendall
Reply | Threaded
Open this post in threaded view
|

Re: Select all except

MaudC
Ok, merci, je n'ai pas réussi a faire fonctionner la requête car je n'avais pas de champs id dans la table b. J'ai donc sélectionné les champs un a un !

Cordialement,

Maud
Reply | Threaded
Open this post in threaded view
|

Re: Select all except

Gwendall Petit
Administrator
Bonjour Maud,

Si tu n'as pas d'id dans la table b, alors tu peux en créer un (qui sera une valeur incrémenté de 1)
ALTER TABLE DEPARTEMENT ADD COLUMN id_dept NUMERIC;
UPDATE DEPARTEMENT SET id_dept = Autonumeric();
Cordialement,

Gwendall