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 :

[SQL Serveur] update auto jointure


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [SQL Serveur] update auto jointure
    Bonjour,

    Je voudrais effectuer un update avec une auto-jointure dedans, est ce possible ?

    Voici mon update :

    UPDATE BENEF set BENEF.CLECAISSE = ASSU.CLECAISSE
    inner join CLIENT as ASSU on
    BENEF.NUMSSCLI = ASSU.NUMSSCLI
    where BENEF.CODEBEN >= 11
    and BENEF.CLECAISSE = 0
    and ASSU.CODEBEN = 1
    and ASSU.CLECAISSE <> 0

    Malheureusement cette syntaxe ne fonctionne pas

  2. #2
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    La norme dit : ''Pas d'alias dans les updates.''

    Essaies qque chose ds ce style (en pseudo SQL)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    UPDATE benef
    SET clecaisse = 
    (SELECT assu.clecaisse FROM assu where assu.numsscli = numsscli)

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 774
    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 774
    Points : 52 744
    Points
    52 744
    Billets dans le blog
    5
    Par défaut
    Plus exactement : pas d'alias pour la table cible d'un ordre de mise à jour (INSERT, UPDATE, DELETE).


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE BENEF 
       SET CLECAISSE = ASSU.CLECAISSE
    FROM  BENEF AS BNF
          inner join CLIENT as ASSU 
                on BNF.NUMSSCLI = ASSU.NUMSSCLI
    WHERE BENEF.CODEBEN >= 11
      and BENEF.CLECAISSE = 0
      and ASSU.CODEBEN = 1
      and ASSU.CLECAISSE <> 0
    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/ * * * * *

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup ça marche très bien !

    En fait je me suis trompé sur ma requète ce n'est pas la table BENEF mais la table CLIENT que j'UPDATE, donc ca donne ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    UPDATE BNF 
       SET BNF.CLECAISSE = ASSU.CLECAISSE
    FROM  CLIENT AS BNF
          inner join CLIENT as ASSU 
                on BNF.NUMSSCLI = ASSU.NUMSSCLI
    WHERE BNF.CODEBEN >= 11
      and BNF.CLECAISSE = 0
      and ASSU.CODEBEN = 1
      and ASSU.CLECAISSE <> 0

    Quand vous dites "pas d'alias pour la table cible", c'est pourtant le cas ici non ?

  5. #5
    Membre expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE TABLE_CIBLE
       SET CLECAISSE = ASSU.CLECAISSE
    FROM  BENEF AS BNF
          inner join CLIENT as ASSU 
                on BNF.NUMSSCLI = ASSU.NUMSSCLI
    WHERE BENEF.CODEBEN >= 11
      and BENEF.CLECAISSE = 0
      and ASSU.CODEBEN = 1
      and ASSU.CLECAISSE <> 0
    La table cible est en rouge, il n'y a pas d'alias.
    En bleu, c'est un synonyme de la table cible, donc une table différente, donc les alias sont autorisés.
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

Discussions similaires

  1. Réponses: 8
    Dernier message: 10/04/2008, 10h11
  2. Auto jointure : 1 seul SQL possible?
    Par patozore dans le forum Langage SQL
    Réponses: 2
    Dernier message: 18/02/2008, 15h25
  3. Ecriture Requete SQL auto-jointure
    Par telynor dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/05/2007, 23h50
  4. BO + SQL serveur : probleme de jointures externes
    Par bastoonet dans le forum Designer
    Réponses: 2
    Dernier message: 27/09/2006, 11h59
  5. [PL/SQL] update avec jointure
    Par Fox_magic dans le forum Oracle
    Réponses: 6
    Dernier message: 09/12/2004, 12h19

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