Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
#1 20/12/2012 09:53:30
- lea
- Membre
Comparaison spatiale de 2 tables et insertion de données
Bonjour à tous,
J’ai 2 tables a et b (des polygones dans les 2)… je voudrais faire une comparaison spatiale des 2 tables et si les polygones sont identiques (st_hausdorffdistance=0), ne rien faire, s’ils ne sont pas identiques injecter les polygones de la table b dans la table a avec les attributs(les 2 tables ont exactement les mêmes champs et dans le même ordre) …
J'ai fait ces 2 requêtes ci-dessous mais elles ne fonctionnent pas (pourtant si je lance insert seul il fonctionne):
select a.champs1, a. champs2, a.champs3 ,a.the_geom,a. champs4,
case when st_intersects(a.the_geom, b.the_geom) is false
then INSERT into a SELECT * from b
else null
end as "case"
from schema.table1 as a, schema.table2 as b;
ou
select a.champs1, a. champs2, a.champs3 ,a.the_geom,a. champs4,
case when st_hausdorffdistance(a.the_geom, b.the_geom) >0
then INSERT into a SELECT * from b
else null
end as "case"
from schema.table1 as a, schema.table2 as b;
Sauriez-vous m'aider,
merci,
lea
Hors ligne
#2 20/12/2012 12:45:39
- Marc Cousin
- Membre
Re : Comparaison spatiale de 2 tables et insertion de données
La syntaxe est juste totalement fausse au niveau SQL. La structure case when …… then … else … end ne peut pas exécuter des insert. Elle ne sert qu'à calculer des valeurs à retourner par le select.
Il vous faudrait une syntaxe qui ressemblerait à
INSERT INTO a SELECT b.* FROM schema.table1 as a, schema.table2 as b WHERE st_hausdorffdistance(a.the_geom, b.the_geom) >0
(pas testé évidemement).
En SQL, on ne manipule pas des enregistrements avec des case, on manipule des tables: ici on insère dans la table a le résultat d'une requête (qui produit donc une table).
En espérant avoir clarifié un peu ce qui semble vous poser problème.
Marc.
Hors ligne