Poser votre question
0

Recherche de doublons

posée 2019-03-19 15:59:30 +0200

Image Gravatar de Jacques-64

updated 2019-03-19 21:27:34 +0200

Bonjour, Dans MS-Access, il y avait un assistant pour créer une requête de recherche de doublon. J'ai essayé de recréer ce genre de recherche dans LO-Base sans succès. Sur ma table test, la requête qui semble correspondre à cette fonction serait :

Select distinct "ID", "test", "Valeur", "Date" FROM "Table1" WHERE "Table1"."test" IN SELECT "Table1_1"."test", COUNT( "Table1_1"."Somme" ) FROM "Table1" AS "Table1_1" GROUP BY "Table1_1"."test" HAVING ( ( COUNT( "Table1_1"."Somme" ) > 1 ) )

mais elle me donne un diagnostic d'erreur de syntaxe. J'ai beau chercher dans les FAQ, je ne trouve pas d'explication ni de méthode pour effectuer cette recherche.

Auriez-vous une piste pour résoudre mon problème ?

Merci d'avance

Jacques

Effectivement, avec la base de test, ce serait mieux. Merci de m'excuser. La voici: C:\fakepath\Nouvelle base de données.odb

Au final, je voudrais pouvoir marquer les enregistrements en doublon avec l'ID du plus récent (l'ID le plus élevé).

éditer requalifier signaler fermer fusionner supprimer

Commentaires

Bonjour

Ta requête tente de compter le champ "Table1_1"."Somme" Existe-t-il ?

Cordialement

Image Gravatar de pierre-yves samynpierre-yves samyn ( 2019-03-19 18:30:44 +0200 )éditer

2Réponses

0

répondue 2019-03-19 18:56:05 +0200

Image Gravatar de pierre-yves samyn

Suite...

Ne disposant pas de ta base (c'est un des modules où donner un exemple est quasi indispensable car autrement cela oblige les personnes qui répondent à construire une BDD...) je te joins un exemple de SQL à exécuter via le menu Outils pour te mettre sur la piste.

DELETE FROM "Table1" 
WHERE ID NOT IN
(SELECT MAX( "ID" ) FROM "Table1" GROUP BY "MaDate")

C:\fakepath\doublon.odb

Cordialement

éditer signaler supprimer permalien plus

Commentaires

Merci, La logique du SQL semble différente de celle de MS-Access. Je vais donc essayer de voir si j'y arrive sur ma base.

Après essais, je crains que mon désir soit irréalisable : j'ai le choix entre { "ID" IN (SELECT...} et { "ID" NOT IN (SELECT ... } avec une fonction MAX (ou MIN) alors que je veux TOUS les ID pour lesquels le compte est > 1

Image Gravatar de Jacques-64Jacques-64 ( 2019-03-19 21:44:31 +0200 )éditer

Il n'y a pas que ces possibilités ; en reprenant ma base, pour sélectionner les enregistrements en doublons (et +) sur la date tu peux faire par exemple :

SELECT "ID", "MaDate" FROM "Table1" WHERE "MaDate" IN (SELECT "MaDate" FROM "Table1" GROUP BY "MaDate" HAVING  COUNT( "ID" ) > 1 )
Image Gravatar de pierre-yves samynpierre-yves samyn ( 2019-03-23 13:46:49 +0200 )éditer
0

répondue 2019-03-24 18:34:37 +0200

Image Gravatar de Jacques-64

Je crois avoir trouvé mon erreur !

Le SELECT après IN est entre ( ) alors que je n'en avais pas mis. Je ne dois pas non plus mettre de champ annexe dans la 1ère partie du SELECT (mais, pour cela, le diagnostic est clair). Fonctionne bien avec un seul champ. Maintenant, il me reste à régler le problème du doublon sur plusieurs champs. Ce sera une autre question si j'échoue car pour l'instant, j'ai le diagnostic

Single column select required in IN predicate in statement [SELECT

Jacques

éditer signaler supprimer permalien plus
S'identifier/S'inscrire pour répondre

Outils de question

1 suiveurs

Stats

Posée: 2019-03-19 15:59:30 +0200

Consultée: 105 fois

Mise à jour: Mar 24