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 FROM . . . WHERE EXISTS


Sujet :

MS SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Par défaut DELETE FROM . . . WHERE EXISTS
    Bonjour,
    Je suis sous SQL Server.

    Cette requête fonctionne avec un SELECT, mais ne me supprime aucune ligne avec un DELETE

    Pourquoi ? Toute aide ou information est la bienvenue, parce que là je sèche ...

    Merci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DELETE FROM TabDim
    WHERE EXISTS (SELECT D2.*
    	         FROM TabDim D2
    	         WHERE COD_NAT=D2.COD_NAT
    	         AND COD_CHA<>D2.COD_CHA)
    AND LaPerio <> (SELECT MAX(D3.LaPerio)
    	          FROM TabDim D3
    	          WHERE D3.COD_NAT=COD_NAT)

  2. #2
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT *
    FROM TabDim
    WHERE EXISTS (SELECT D2.*
    	         FROM TabDim D2
    	         WHERE COD_NAT=D2.COD_NAT
    	         AND COD_CHA<>D2.COD_CHA)
    AND LaPerio <> (SELECT MAX(D3.LaPerio)
    	          FROM TabDim D3
    	          WHERE D3.COD_NAT=COD_NAT)
    Cette requête vous retourne quelque chose et le DELETE ne fait rien?

    N'avez vous pas un message d'erreur lors de la suppression?

  3. #3
    Membre éprouvé Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Par défaut
    Déjà merci de votre réponse.

    Non, ma requête ne génère pas d'erreur SQL. Elle m'indique juste qu'aucune ligne n'a été supprimée.
    Et en effet, la même requête SQL avec un SELECT me retrourne le résultat souhaité.

    La suppression de la sous-requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    AND LaPerio <> (SELECT MAX(D3.LaPerio)
    	          FROM TabDim D3
    	          WHERE D3.COD_NAT=COD_NAT)
    ne change rien au problème.

    (COD_CHA, COD_NAT) couple PK de ma table TabDim.

  4. #4
    Membre éprouvé Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Par défaut
    Ah !
    Je crois avoir trouvé ! Le problème vient du fait que je ne puisse pas définir un alias sur TabDim que je veux supprimer.

    Si je mets un alias D1, il plante (j'avais pu le mettre dans mon SELECT, c'est pour cela que ça fonctionnait en effet )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DELETE FROM TabDim D1
    WHERE EXISTS (SELECT D2.*
    			  FROM TabDim D2
    			  WHERE D1.COD_NAT=D2.COD_NAT
    			  AND D1.COD_CHA<>D2.COD_CHA)
    AND D1.LaPerio <> (SELECT MAX(D3.LaPerio)
    				FROM TabDim D3
    				WHERE D3.COD_NAT=D1.COD_NAT)
    Msg*102, Niveau*15, État*1, Ligne*1
    Syntaxe incorrecte vers 'D1'.
    Msg*156, Niveau*15, État*1, Ligne*6
    Syntaxe incorrecte vers le mot clé 'AND'.

  5. #5
    Membre éprouvé Avatar de tfc3146
    Homme Profil pro
    Développeur décisionnel
    Inscrit en
    Février 2009
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur décisionnel
    Secteur : Boutique - Magasin

    Informations forums :
    Inscription : Février 2009
    Messages : 79
    Par défaut
    J'ai trouvé ça :

    "Non, à ma connaissance, SQL-Server ne supporte pas les alias pour la
    commande Delete. Vous pouvez néanmoins retravailler votre requête pour
    utiliser un énoncé EXISTS ou NOT EXISTS ou IN"

    Mais dans mon cas, puis je y arriver ? Je ne vois vraiment pas comment faire ...

  6. #6
    Invité
    Invité(e)
    Par défaut
    exemple de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -- Transact-SQL extension
    USE AdventureWorks2008R2;
    GO
    DELETE FROM Sales.SalesPersonQuotaHistory 
    FROM Sales.SalesPersonQuotaHistory AS spqh
    INNER JOIN Sales.SalesPerson AS sp
    ON spqh.BusinessEntityID = sp.BusinessEntityID
    WHERE sp.SalesYTD > 2500000.00;
     
    GO
    http://msdn.microsoft.com/fr-fr/library/ms189835.aspx

Discussions similaires

  1. delete from table1 where rien dans table2
    Par tofito dans le forum Débuter
    Réponses: 3
    Dernier message: 03/12/2009, 17h14
  2. Requete: Delete from T where Not In
    Par jamesleouf dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2008, 09h15
  3. DELETE et WHERE EXISTS
    Par jeandu69 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 18/02/2008, 10h22
  4. Delete * From * Where ?!
    Par gui38 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 21/12/2006, 10h51
  5. DELETE FROM t where t.id IN (SELECT id FROM t....)
    Par davcha dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2006, 15h19

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