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

PostgreSQL Discussion :

postgis update sur un sous-ensemble [9.2]


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut postgis update sur un sous-ensemble
    bonjour
    Je souhaite faire une mise à jour via CASE , sur un sous-ensemble d'une table . Ce sous-ensemble est basé sur une requête spatiale . Ca ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update t1
    set f1 = CASE WHEN...
             WHEN...
             END
    FROM (select * from t2 join t1 on st_intersects(t2.geom, t1.geom)
    WHERE *a_field_from_t2* = *a_value*) as foo ;
    Cette mise à jour fonctionne toujours avec la totalité des données de t1 c'est-à-dire la requete spatiale n'est pas utilisée. Je ne trouve pas la raison.
    Une idée ?
    Merci

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    il met à jour T1, car c'est ce que vous lui demandez !!
    UPDATE T1.

    Si j'ai bien compris, c'est donc foo qu'il faut mettre à jour.
    Mais en fonction de votre modèle, ce ne sera pas forcément possible de cette façon.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    Merci
    Mais alors comment mettre à jour un sous-ensemble de t1 uniquement ?

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    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 080
    Points : 30 778
    Points
    30 778
    Par défaut
    En ajoutant une clause WHERE à la commande UPDATE...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    J'aurai dit quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    update t1
    set f1 = CASE WHEN...
             WHEN...
             END
    FROM t2 
    WHERE st_intersects(t2.geom, t1.geom)
    AND *a_field_from_t2* = *a_value*;
    a tester...

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    cette solution n'est pas possible car il manque l'appel à la table t2...d'où l'idée de faire une sélection préalable...qui ne fonctionne pas...d'où mon premier post

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 814
    Points
    17 814
    Par défaut
    La table t2 est bien dans le FROM de aieeeuuuuu.

    On retrouve cette syntaxe de mise à jour dans la doc de postgresql :
    http://postgresql.developpez.com/doc...ql-update.html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE employes
       SET total_ventes = total_ventes + 1
      FROM comptes
     WHERE compte.nom  = 'Acme Corporation'
       AND employes.id = compte.vendeur;
    Si ça ne fonctionne pas, il y a peut-être une limitation avec postGis.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 191
    Points : 78
    Points
    78
    Par défaut
    ah oui effectivement j'avais lu cette partie de la doc mais je persistais avec mon select après le where
    Donc merci à vous et aieuuuuu en particulier.
    Résolu donc.

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

Discussions similaires

  1. Tri sur un sous ensemble dans une requête
    Par Mister Nono dans le forum Doctrine2
    Réponses: 3
    Dernier message: 12/05/2014, 17h47
  2. [AC-2010] Requête Update sur le résultat d'une sous-requête
    Par curt dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 06/07/2013, 22h40
  3. Réponses: 1
    Dernier message: 21/08/2011, 08h22
  4. Sous-ensembles de tuples
    Par HPJ dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/10/2003, 17h24
  5. Réponses: 4
    Dernier message: 27/03/2002, 12h03

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