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 :

Mise à jour de données à partir d'une autre table


Sujet :

Langage SQL

  1. #1
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut Mise à jour de données à partir d'une autre table
    Je trouve ce code dans la FAQ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    update   MAJ 
    from   TABLE_CIBLE      as MAJ 
       ,   TABLE_SOURCE   as SRC 
    set      CHAMP_CIBLE      = SRC.CHAMP_SOURCE 
    where   MAJ.CLE_JOINTURE = SRC.CLE_JOINTURE
    Sous Paradox, il coince sur le FROM en 2ème ligne . Et je ne retrouve ce style de code nulle part (SQLPro par ex.) D'où ma question politiquement incorrecte : Est-ce que c'est Paradox qui ne supporte pas, ou bien il y a une erreur dans le code ?
    Roland

  2. #2
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Hum, je n'ai pas essayé mais j'aurais tendance à faire un truc comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE
      TABLE_CIBLE AS MAJ,
      TABLE_SOURCE AS SRC
    SET TABLE_CIBLE.CHAMP_CIBLE = SRC.CHAMP_SOURCE
    WHERE MAJ.CLE_JOINTURE = SRC.CLE_JOINTURE

  3. #3
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Il n'aime pas non plus le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TABLE_CIBLE AS MAJ,
    TABLE_SOURCE AS SRC
    la virgule le chagrine.

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    UPDATE TABLE_CIBLE
    SET TABLE_CIBLE.CHAMP_CIBLE 
      = (SELECT MAX (TABLE_SOURCE.CHAMP_SOURCE)
           FROM TABLE_SOURCE
          JOIN TABLE_CIBLE
         ON TABLE_CIBLE.CLE_JOINTURE = TABLE_SOURCE.CLE_JOINTURE)
    Il ne me signale plus d'ereur de syntaxe, mais une "erreur à la création du Handle de curseur"! On progresse
    Roland

  4. #4
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Tu es sur que c'est la virgule qui n'aime pas ? Et pas le AS ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE
      TABLE_CIBLE MAJ,
      TABLE_SOURCE SRC
    ...
    Ca m'étonnerait beaucoup mais bon !

    Citation Envoyé par rsc
    Il ne me signale plus d'ereur de syntaxe, mais une "erreur à la création du Handle de curseur"!
    Heu tu es dans une procédure ou une fonction ?

  5. #5
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut
    Citation Envoyé par BiMouXeTTe
    Tu es sur que c'est la virgule qui n'aime pas ? Et pas le AS ?
    Oui oui, il parle bien du mot clé ","
    Citation Envoyé par BiMouXeTTe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    UPDATE
      TABLE_CIBLE MAJ,
      TABLE_SOURCE SRC
    ...
    Même erreur

    Citation Envoyé par BiMouXeTTe
    Citation Envoyé par rsc
    Il ne me signale plus d'ereur de syntaxe, mais une "erreur à la création du Handle de curseur"!
    Heu tu es dans une procédure ou une fonction ?
    J'ouvre un Tquery dans Delphi (les erreurs sont plus précisément signalées que dans le Module de base de données lui-même)
    Roland

  6. #6
    BiM
    BiM est déconnecté
    Expert éminent sénior
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Points : 10 765
    Points
    10 765
    Par défaut
    Au temps pour moi

    Niveau DELPHI, je ne m'y connais pas, seules de légères notions... Donc là, je t'avoue... que je suis impuissante

  7. #7
    rsc
    rsc est déconnecté
    Membre éprouvé
    Avatar de rsc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 711
    Points : 918
    Points
    918
    Par défaut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    UPDATE TABLE_CIBLE
    SET TABLE_CIBLE.CHAMP_CIBLE 
      = (SELECT MAX (TABLE_SOURCE.CHAMP_SOURCE)
           FROM TABLE_SOURCE
         WHERE TABLE_SOURCE.CLE_JOINTURE = TABLE_CIBLE.CLE_JOINTURE)
    marche. L'erreur de "création du Handle de curseur" venait de la manière dont je le lançais.

    Par contre, au niveau performance, c'est nul ! Et si on rajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE EXISTS (SELECT TABLE_SOURCE.CHAMP_SOURCE
           FROM TABLE_SOURCE
         WHERE TABLE_SOURCE.CLE_JOINTURE = TABLE_CIBLE.CLE_JOINTURE)
    pour éviter les pb de non-existence (cf http://www.techonthenet.com/sql/update.php), ce qui semble prudent, c'est encore pire !
    Roland

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 766
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 766
    Points : 52 563
    Points
    52 563
    Billets dans le blog
    5
    Par défaut
    Cette syntaxe avec le FROM dans l'UPDATE est propre à MS SQL Server.

    Elle n'est pas conforme à la norme SQL.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Mettre à jour un champ à partir d'une autre table
    Par leuzar dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/10/2014, 09h53
  2. Insérer des données à partir d'une autre table
    Par Anduriel dans le forum Langage SQL
    Réponses: 10
    Dernier message: 27/07/2012, 17h40
  3. Mise à jour colonne vide à partir d'une autre colonne
    Par Ordonnateur dans le forum Oracle
    Réponses: 2
    Dernier message: 08/11/2011, 10h32
  4. Réponses: 5
    Dernier message: 12/12/2006, 16h24
  5. Réponses: 3
    Dernier message: 09/07/2004, 10h23

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