J'essaie de supprimer tous les enregistrements sauf un de la table où le champ de nom répète la même valeur plus de 5 fois et le champ d'adresse répète plus que cinq fois pour une table. Donc, s'il y a 5 enregistrements avec un champ de nom et champ d'adresse qui sont les mêmes pour tous les 5, je voudrais supprimer 4 sur 5. Un exemple:Utilisation de sql pour conserver un seul enregistrement où le champ de nom et le champ d'adresse se répètent dans 5 enregistrements
id name address
1 john 6440
2 john 6440
3 john 6440
4 john 6440
5 john 6440
Je veux seulement revenir 1 dossier à partir des 5 enregistrements ci-dessus.
J'ai encore des problèmes avec ça.
1) Je crée une table appelée KeepThese et lui donne un identifiant de clé primaire. 2) Je crée une requête appelée delete_1 et copier ce en elle:
INSERT INTO KeepThese
SELECT ID FROM
(
SELECT Min(ID) AS ID
FROM Print_Ready
GROUP BY names_1, addresses
HAVING COUNT(*) >=5
UNION ALL
SELECT ID FROM Print_Ready as P
INNER JOIN
(SELECT Names_1, addresses
FROM Print_ready
GROUP BY Names_1, addresses
HAVING COUNT(*) < 5) as ThoseLessThan5
ON ThoseLessThan5.Names_1 = P.Names_1
AND ThoseLessThan5.addresses = P.addresses
)
3) Je crée une requête appelée delete_2 et copier ce en elle:
DELETE P.* FROM Print_Ready as P
LEFT JOIN KeepThese as K
ON K.ID = P.ID
WHERE K.ID IS NULL
4) Ensuite, je lance delete_1. Je reçois un message qui dit "référence circulaire causée par alias ID" Donc, je change cette pièce: DE (SELECT min (ID) AS ID pour dire ceci: DE (SELECT min (ID) AS ID2 Puis je double-cliquez Une fenêtre contextuelle s'affiche indiquant Entrer la valeur du paramètre pour l'ID.Cela indique qu'il ne sait pas quel ID est.Parce que print_ready est seulement une requête et qu'il a un ID, c'est en réalité l'ID d'une autre table qui a été filtrée dans cette requête.
Je ne sais pas ce qu'il faut faire à ce stade.
'Min (P.ID) Comme ID' devrait fonctionner car il n'est plus ambigu. Mais il semble que vous oubliez un peu votre SQL. –