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

Développement SQL Server Discussion :

Supprimer les doublons


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut Supprimer les doublons
    Bonjour à vous,

    J'ai récupéré ce code pour supprimer les doublons et cela ne fonctionne pas, je suis sur SQL Server 2008 R2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    DELETE 
    FROM   SALARIES Ta 
    WHERE  Ta.COLID < ANY (SELECT t2.COLID
                          FROM    SALARIES T2
                          WHERE  Ta.COLID <> T2.COLID
                            AND  Ta.NOM = T2.NOM
                            AND  Ta.PRENOM    = T2.PRENOM
                            AND  Ta.AGES = T2.AGES) 
     
    ERREUR :
    Msg 102, Niveau 15, État 1, Ligne 3
    Syntaxe incorrecte vers 'Ta'
    Merci.

  2. #2
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut
    Pas sur que tu puisses aliaser dans un delete
    Essaie sans l'alias:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DELETE
    FROM SALARIES
    WHERE COLID < ANY (SELECT t2.COLID
    FROM SALARIES T2
    WHERE SALARIES.COLID <> T2.COLID
    AND SALARIES.NOM = T2.NOM
    AND SALARIES.PRENOM = T2.PRENOM
    AND SALARIES.AGES = T2.AGES)

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par fflores Voir le message
    Pas sur que tu puisses aliaser dans un delete
    Ça sort d'où cette légende urbaine ???
    Un exemple rapide d'alias que j'ai sous le coude (mais sans rapport avec la demande initiale) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    -- supprime tous l'historique des jobs de PROD de plus de 6 mois qui ont fini en succès
    delete DAJSJH
    from AllDbs.db_all_jobs_sysjobhistory DAJSJH
    join AllDbs.db_all_MASTER DAM
    	on DAM.sname = DAJSJH.instance 
    where DAJSJH.ts_day < dateadd ( month , -6 , @today )
    	and DAJSJH.run_status = 1 -- SUCCESS
    	and DAM.prod = 1 -- PROD

  4. #4
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut
    OK, je comprends maintenant pourquoi moi aussi je rencontrais des difficultés, j'avais mal analysé la syntaxe.
    En fait, d'après ce que je vois dans cet exemple il faut ajouter l'alias juste après le delete, c'est ce qui manquait.
    Il fallait écrire
    DELETE Ta
    FROM...

    Il eut peut-être été plus sympa et plus constructif d'expliquer cela plutôt que de faire ce genre de remarque non?

  5. #5
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    Parce qu'il faut préciser l'alias après le delete.

    Cette requête fonctionnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DELETE Ta
    FROM   SALARIES Ta 
    WHERE  Ta.COLID < ANY (SELECT t2.COLID
                          FROM    SALARIES T2
                          WHERE  Ta.COLID <> T2.COLID
                            AND  Ta.NOM = T2.NOM
                            AND  Ta.PRENOM    = T2.PRENOM
                            AND  Ta.AGES = T2.AGES)

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par fflores Voir le message
    Il eut peut-être été plus sympa et plus constructif d'expliquer cela plutôt que de faire ce genre de remarque non?
    Désolé mais pour la correction de syntaxe, j'ose imaginer que la première chose qui est faite, est d'aller la vérifier directement à la source sous MSDN.

  7. #7
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    22
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 22
    Par défaut
    Merci Fabrice c'est ce que j'ai fait et sa marche.

    Voici le code complet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    /****** AJOUTER UNE COLONNE QUI SERA UN CHAMP AVEC IDENTIFIANT UNIQUE ******/
    ALTER TABLE dbo.SALARIES
          ADD COLID INT 
     
     
     
     
    /****** ALIMENTER LA COLONNE CREER PRECEDAMENT AVEC DES VALEURS UNIQUE ******/
    DECLARE @i INT
    DECLARE @colid INT
     
    SET @i = 1
     
    DECLARE CURSEUR_DOUBLON CURSOR
    FOR    
       SELECT COLID
       FROM   SALARIES
    FOR UPDATE
     
    OPEN CURSEUR_DOUBLON
     
    FETCH CURSEUR_DOUBLON INTO @colid
     
    WHILE @@FETCH_STATUS = 0
    BEGIN
     
       UPDATE SALARIES
       SET    COLID = @i
       WHERE  CURRENT OF CURSEUR_DOUBLON
     
       SET @i = @i + 1
     
       FETCH CURSEUR_DOUBLON INTO @colid  
     
    END
     
    CLOSE CURSEUR_DOUBLON
     
    DEALLOCATE CURSEUR_DOUBLON
     
     
     
    /****** SUPPRIMER LES LIGNES EN DOUBLE ******/                            
     
    DELETE FROM SALARIES
    WHERE COLID NOT IN
    (
    	SELECT MIN(COLID) 
    	FROM SALARIES T2
    	WHERE SALARIES.NOM = T2.NOM
              AND  SALARIES.PRENOM    = T2.PRENOM
              AND  SALARIES.AGES = T2.AGES
    	GROUP BY T2.NOM, T2.PRENOM, T2.AGES
    );

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. supprimer les doublons dans une table
    Par mavean dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 26/06/2019, 13h26
  2. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  3. Comment supprimer les doublons?
    Par Dnx dans le forum Langage SQL
    Réponses: 3
    Dernier message: 24/11/2005, 16h35
  4. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12
  5. [ListView]Supprimer les doublons
    Par mohamed dans le forum Composants VCL
    Réponses: 1
    Dernier message: 27/10/2005, 12h14

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