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

Requêtes et SQL. Discussion :

[Requête/SQL]Recherche de doublons


Sujet :

Requêtes et SQL.

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut [Requête/SQL]Recherche de doublons
    Salut à tous, j'ai un problème avec une requette recherche de doublons , j'avais soulevé ça il y a quelques temps puis j'avais résolu mon affaire et là ...
    En fait, à partir d'une requette (R Equipe Match 3), j'ai cré une requette recherche de doublons un peu modifiée : En critère sous [Date], j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    In (SELECT [Date] FROM [R Equipes Matchs 3] As Tmp GROUP BY [Date],[Heure],[Gymnase],[Dom/Ext] HAVING Count(*)>1  And [Heure] >= [R Equipes Matchs 3].[Heure] And [Heure] <= [R Equipes Matchs 3].[Heure fin] And [Gymnase] = [R Equipes Matchs 3].[Gymnase] And [Dom/Ext] = [R Equipes Matchs 3].[Dom/Ext])
    pour rechercher quels sont les matchs en doublon (dans le même créneau horraire dans le même gymnase), ça marchait bien et depuis que j'ai filtré ma requette source (R Equipe Match 3) avec >Date() en critère sous [Date], ça ne marche plus et le pire, même si je retire ce critère ???
    quelqu'un a t-il une idée?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    j'aurais plutôt fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT DISTINCT T1.date
    FROM [R Equipes Matchs 3] AS T1
    WHERE ((((select count(*) from  [R Equipes Matchs 3] where date=T1.date
     and [dom/ext]=t1.[dom/ext] and gymnase=T1.gymnase
     and (heure between T1.heure and T1.[heure fin])))>1));
    cordialement,

    Philippe

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut
    Salut Philben et merci pour cette réponse mais j'ai un message me disant que j'ai mal placé (je ne sais pas quoi) et qu'il faut le mettre sous la requette entre parenthèses.
    Peut être ai-je mal retranscrit, je me suis contenté de copier ton code tel quel à la place du mien ???
    Sinon, à quoi correspond T1 ?

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    T1 est un alias de ta requête, (un surnom en faite)

    Peux-tu mettre ta requête en entier, on y verra plus clair.

    Cordialement,

    Philippe

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut
    Avec plaisir mais je ne sais pas troop comment faire pour mettre toute ma requette

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    bonjour,

    Si j'ai bien compris ma requete utilise ta requete <R Equipes Matches 3].

    Il faut donc poster cette dernière, car j'ai vérifié la mienne, elle fonctionne a priori si ta requete renvoie bien les colonnes suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Date
    Gymnase
    Dom/Ext
    Heure
    Heure Fin
    Merci de poster aussi le message affiché par Access sur l'erreur. Ma requete s'affiche t'elle dans le QBE ?

    Cordialement,

    Philippe

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut
    Salut,
    En fait, [R Equipe Match 3], renvoie bien ces colones (+ d'autres) et est filtrée sur Date par >Date().
    Le message renvoyé est le suivant :Cette expression comporte une sous requette erronée, placez la sous requette entre parenthèses.
    Sinon, je peux essayer d'envoyer la BDD, ce sera peut être + facile à voir.

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    Y'a peut-être un problème dans la requete [R equipes matchs 3] et non avec la dernière...
    Essayer celle-ci avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT Count(R1.date) AS Doublons, R1.date, R1.heure, R1.[heure fin], R1.gymnase, R1.[dom/ext]
    FROM [R Equipes Matchs 3] AS R1 INNER JOIN [R Equipes Matchs 3] AS R2
     ON (R1.[dom/ext] = R2.[dom/ext]) AND (R1.gymnase = R2.gymnase) AND 
    (R1.date = R2.date)
    WHERE (((R1.heure) Between [R2].[heure] And [R2].[heure fin]))
    GROUP BY R1.date, R1.heure, R1.[heure fin], R1.gymnase, R1.[dom/ext]
    HAVING (((Count(R1.date))>1));
    si ca ne fonctionne, ok pour BD.

    cordialement,

    Philippe

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut
    En fait, je comprends ce qui ne va pas, le code que tu me donne correspond à la totalité de la requette et moi, je ne sais pas utiliser celà en SQL direct, donc, je me prends les pieds dans le tapis à chaque fois.
    je mets ma BDD, tu comprendra mieux comment je procède.
    ma requette s'appelle "R Doublons de salles".
    Pour le reste, c'est un peu fouilli mais ça marche.

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    Je suis parti du principe que l'on souhaite voir tous les libellés des matchs qui interfèrent entre eux et on évite d'utiliser une sous-requête qui théoriquement ralentie l'extraction des données.

    On affiche donc tous les matchs qui, par rapport au match M1 qui a lieu entre 12h et 14h :
    qui débute avant et finissent après (ex : 11h 17h)
    qui se jouent pendant ce temps (ex :12h30 13h30)
    ou qui débutent ou finissent pendant ce temps (ex : 13h 17h, 14h 17h, 11h 12h, etc)

    Voici la requête qui remplace TOUTE la requete <R doublons de salles> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT R1.Date, R1.Heure, R1.[Heure fin], R1.Gymnase, R1.[Dom/Ext],
     R1.Equipe, R1.[N° de Match], R1.Adversaire, R1.Championnat, R1.Saison
    FROM [R Equipes Matchs 3] AS R1 INNER JOIN [R Equipes Matchs 3] AS R2
     ON (R1.Date = R2.Date) AND (R1.Gymnase = R2.Gymnase) AND 
    (R1.[Dom/Ext] = R2.[Dom/Ext])
    WHERE (((R1.Heure) Between [R2].[heure] And [R2].[heure fin])) OR
     (((R1.[Heure fin]) Between [R2].[heure] And [R2].[heure fin])) OR
     (((R1.Heure)<[R2].[Heure]) AND ((R1.[Heure fin])>[R2].[Heure fin]))
    GROUP BY R1.Date, R1.Heure, R1.[Heure fin], R1.Gymnase, R1.[Dom/Ext],
     R1.Equipe, R1.[N° de Match], R1.Adversaire, R1.Championnat, R1.Saison
    HAVING (((Count(R1.Date))>1));
    Sauf erreur ça devrait fonctionner !

    Philippe

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut
    Super mais comment je fais pour integrer tout ce code et où?
    j'ai essayé d'ouvrir ma raquette en modif, d'ouvrir le code SQL direct et de remplacer le code existant par le tien mais ça me fait des trucs bizares, quand je veux ouvrir ma requette, il m'ouvre une boite pour définir des sources, je ne comprend pas grand chose.
    Dhabitude, je crée une requette en choisissant mes tables sources et mes champs et après, je place mes critères.

  12. #12
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    je joint ta base modifiée, l'ancienne requete est renommée avec OLD à la fin.

    La requete fonctionne bien, j'ai par contre eu des messages au démarrage de ta base car tu as activé des références que je n'ai pas ...

    J'ai donc désactivé certaines références dans VBE, ce qui veut dire qu'il ne faut pas utiliser la base que je te donne mais tu peux récupérer juste la requete (par import ou autre)

    http://pbserv.free.fr/planning.rar

    Cordialement,

    Philippe

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut
    Super, tout marche super bien, je te remercie infiniment, ça fait des semaines que je planchait la dessus.
    par contre, à quoi correspond le >1 en critère dans Date (R1) car si je l'enlève, il me trouve 2 autres doublons qu'il ne voit pas avec ce critère ???
    En tout cas, tu as ma reconnaissance éternelle.
    Merci encore.

  14. #14
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2006
    Messages
    1 399
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 399
    Points : 2 221
    Points
    2 221
    Par défaut
    re bonjour,

    à quoi correspond le >1 en critère dans Date (R1)
    il permet de n'afficher que les enregistrements en doublons (donc > 1).
    Faire des tests pour vérifier, mais c'est indispensable...

    Pour info, vous avez trop de références activées et c'est une source de problème et de portabilité car si une référence est absente de l'ordinateur, ça peut entrainer des erreurs même si la référence n'est pas utilisée...
    Avant de désactiver une référence, être sûr qu'elle n'est pas utilisée !
    (voir autres discussions sur le sujet)

    Cordialement,

    Philippe

  15. #15
    Membre actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    275
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 275
    Points : 238
    Points
    238
    Par défaut
    Citation Envoyé par philben
    vous avez trop de références activées et c'est une source de problème et de portabilité car si une référence est absente de l'ordinateur, ça peut entrainer des erreurs même si la référence n'est pas utilisée...
    Merci, maintenant que la base est terminée (c'était mon dernier problème), je vais commencer à faire le ménage.
    En tout cas, merci encore pour votre aide.
    cordialement
    TH

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

Discussions similaires

  1. Requête à le recherche de doublons
    Par titinesaku dans le forum Requêtes
    Réponses: 6
    Dernier message: 06/05/2011, 09h29
  2. [Requête SQL] Recherche multiple
    Par fabi19022 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/04/2010, 09h23
  3. Réponses: 3
    Dernier message: 26/07/2009, 10h06
  4. [MySQL] [MySQL] requête sql recherche de mots clés
    Par lanysteph dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 02/07/2009, 18h13
  5. [pl-sql] Recherche de doublons dans une table
    Par tommey dans le forum Oracle
    Réponses: 1
    Dernier message: 08/11/2006, 22h53

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