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

Langage SQL Discussion :

update avec select


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut update avec select
    bonjour

    je n'arrive pas a faire un update de table a partir d'une requete sur une 2eme table.

    table 1 :
    x,y,i_pr,ii_pr,iii_pr ...xii_pr
    x et y coordoonnes point
    i_pr : pluvio pour mois de janvier
    ii_pr : pluvio pour mois de fevrier
    ...

    table 2 :
    mois,x,y,pr

    en sachant que : il y 550 000 points identiques / mois

    je voudrais faire un update sur la table 1 de maniere à mettre a jour le champs pr se trouvant dans table 2 pour chaque mois et chaque point
    exemple pour le mois de janvier mettre a jour la table 1 col i_pr a partir de la table 2 quand le mois = 1 et ceci pour tous les points identiques
    j'ai essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    update table1 
    set ii_pr = (
      select pr 
      from table2 
      where mois=2 and x=table1.x and y= table1.y
    )
    mais ca tourne depuis maintenant 2300000 ms env. ....
    table2 comprend plus de 7 million de lignes et table1 comprend 550 000 env

    j'ai peur du produit cartesien !

    merci d'avance!
    n

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Salut !

    Ton SGBD ?
    As-tu des indexes sur la Table2 ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    hello

    je sous postgresql/postgis
    pas d'index....

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Pose un index sur la table2, colonnes x, y, mois.
    (par exemple)

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    hola tu es un ange!!
    j'ai créé un index sur x et y : resultat : update de 551716 lignes en moins d'une minutes!

    encore merci,
    n

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    225
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 225
    Par défaut
    waldar

    ma table 1 comporte env 550 000 lignes que je vais updater a coup sur sur le champs ii_pr qui correspond au champs pr de la table 2 et mois = 2 pour chaque x et y correspondant.

    d'ailleurs je sollicite a nouveau un avis :
    au depart j'ai une grosse table :
    mois, x , y , pr

    avec pour mois=1 : 550 000 point x,y avec val pr different
    ...pour les 12 mois de l'année, j'ai donc 550 000 points x,y qui se redondent pour tous les mois.

    j'ai donc créé la table 2 avec la structure :
    x, y, i_pr, ii_pr, iii_pr ....xii_pr
    ou je ne stocke finalement qu'une seule fois mes 550 000 points x,y (que j'ai effectievement intégré avec insert select )

    mon but est de mettre a jour tous les mois ii_pr, iii_pr, ... a partir de la tabel 1

    voila , je prend toutes les bonnes idees!
    merci,

    n

  7. #7
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous n'avez pas mis de where au niveau de votre update... donc il va mettre à jour toute la table table1, en mettant null quand il ne trouve pas de correspondance.

  8. #8
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    D'ailleurs en relisant votre sujet, vous mettez à jour toute la table 1 à partir de la table 2 ?

    Si oui, tronquez votre table1 et insérez le select qui va bien depuis la table2, ça ira nettement plus vite.

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

Discussions similaires

  1. Requête update avec select imrbiqué
    Par Woufeigh dans le forum Requêtes
    Réponses: 1
    Dernier message: 05/05/2008, 00h43
  2. Requête Update avec Select.
    Par franzarelli dans le forum Langage SQL
    Réponses: 1
    Dernier message: 25/03/2008, 05h33
  3. Update avec Select : je n'y arrive pas.
    Par marye77 dans le forum Langage SQL
    Réponses: 15
    Dernier message: 22/02/2008, 16h51
  4. UPDATE avec SELECT sur la même table
    Par Invité dans le forum Langage SQL
    Réponses: 7
    Dernier message: 07/12/2007, 03h39
  5. Requete Update avec Select imbriqué: etrange resultat!
    Par corentone dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/08/2007, 15h05

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