Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/01/2012, 12h36   #1
Invité de passage
 
Inscription : juin 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 22
Points : 3
Points : 3
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 :
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.
slimsamfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 13h17   #2
Membre à l'essai
 
Homme Fabrice Flores
Administrateur de base de données
Inscription : décembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Flores
Âge : 46
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
Points : 20
Points : 20
Pas sur que tu puisses aliaser dans un delete
Essaie sans l'alias:

Code :
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)
fflores est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 15h12   #3
Invité de passage
 
Inscription : juin 2006
Messages : 22
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 22
Points : 3
Points : 3
Merci Fabrice c'est ce que j'ai fait et sa marche.

Voici le code complet :
Code :
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
);
slimsamfr est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 15h14   #4
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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 :
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
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 18h05   #5
Membre à l'essai
 
Homme Fabrice Flores
Administrateur de base de données
Inscription : décembre 2011
Messages : 17
Détails du profil
Informations personnelles :
Nom : Homme Fabrice Flores
Âge : 46
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
Points : 20
Points : 20
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?
fflores est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 18h16   #6
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
Parce qu'il faut préciser l'alias après le delete.

Cette requête fonctionnerait :

Code :
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)
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/01/2012, 20h21   #7
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 523
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 523
Points : 3 972
Points : 3 972
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.
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h15.


 
 
 
 
Partenaires

Hébergement Web