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 920
    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 920
    Points : 51 712
    Points
    51 712
    Billets dans le blog
    6
    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 +

  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 : 48
    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.

Discussions similaires

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

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