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

MS SQL Server Discussion :

DELETE avec left join


Sujet :

MS SQL Server

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut DELETE avec left join
    Bonjour

    Peux-t-on faire un delete avec un left join

    si j'execute la commande select suivante tout va bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     select * from TradeInBasket 
     LEFT OUTER JOIN TradeIn  ON TradeInBasket.ID = TradeIn.TradeInBasketID WHERE 
      (TradeIn.ID IS NULL and CreationDT < '20100428' )
    Par contre si je derive cette meme commande pour faire un delete
    j'ai une erreur de syntaxe

    Msg 102, Level 15, State 1, Line 1
    Incorrect syntax near 'delete'.


    Que fais-je comme betise ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     delete from TradeInBasket 
     LEFT OUTER JOIN TradeIn  ON TradeInBasket.ID = TradeIn.TradeInBasketID WHERE 
      (TradeIn.ID IS NULL and CreationDT < '20100428' )

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DELETE FROM TradeInBasket 
    FROM TradeInBasket 
    LEFT OUTER JOIN TradeIn  
     ON TradeInBasket.ID = TradeIn.TradeInBasketID 
    WHERE (TradeIn.ID IS NULL AND CreationDT < '20100428')
    ++

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci MikeDavem

    Je vois mais c'est pas evident a capter

    En terme logique, comment peut-on justifier cette syntaxe ?

    Merci de m'éclairer

  4. #4
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    En terme logique, comment peut-on justifier cette syntaxe ?
    Toute jointure se spécifie à l'aide du mot clé FROM et d'un prédicat de jointure introduit par JOIN.

    Si c'est le FROM du DELETE qui vous perturbe, sachez que vous pouvez vous en passer (mais que ce n'est pas standard)

    @++

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci Elsuket

    Effectivement c'est le from du delete qui me perturbait (ou plutot le double from)

    Car sans jointure j'avais l'habitude de voir simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from truc where ID='machin'

  6. #6
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Vous pouvez également utiliser NOT EXISTS avec une clause WHERE et qui fonctionne bien également

    ++

  7. #7
    Candidat au Club
    Inscrit en
    Avril 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par mikedavem Voir le message
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DELETE FROM TradeInBasket 
    FROM TradeInBasket 
    LEFT OUTER JOIN TradeIn  
     ON TradeInBasket.ID = TradeIn.TradeInBasketID 
    WHERE (TradeIn.ID IS NULL AND CreationDT < '20100428')
    ++
    Il y a un FROM de trop dans ton code, il faut taper :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DELETE TradeInBasket 
    FROM TradeInBasket 
    LEFT OUTER JOIN TradeIn  
     ON TradeInBasket.ID = TradeIn.TradeInBasketID 
    WHERE (TradeIn.ID IS NULL AND CreationDT < '20100428')
    Ca parait beaucoup plus logique du coup... la ou les tables indiquée(s) derrière DELETE sont celles dans lesquelles les enregistrements vont être supprimés.

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    La syntaxe de MikeDavem est cependant bonne !!

Discussions similaires

  1. [Access] Requête avec LEFT JOIN et 3 tables
    Par estelledany dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/06/2006, 13h27
  2. Reqête avec LEFT JOIN
    Par kirsoul dans le forum Requêtes
    Réponses: 5
    Dernier message: 26/12/2005, 18h00
  3. Plantage Mysql avec LEFT JOIN
    Par verticka dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/09/2005, 11h45
  4. requete avec left join et group by
    Par slc dans le forum Requêtes
    Réponses: 2
    Dernier message: 14/09/2004, 18h03
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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