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

SQL Oracle Discussion :

Doublons à éliminer SQL


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Doublons à éliminer SQL
    Bonjour,

    J'ai une table où ma clé (book) peut avoir jusqu'à 6 Digits, mais que le maximum permis est 5.
    En faisant un substr , on peut tomber sur des doublons dont il faut éliminer celui qui a plus de 5 digits.
    Aussi, il y a ceux qui sont a 6 digits dont le seul besoin est de le tronquer à 5 digits.

    exp:

    01455
    01455w
    47815w
    4201

    Ici, je dois supprimer le 01455w

    J'ai essayé cette requête mais ça me redonne le même nombre de lignes que matable initiale.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT corp.* FROM  matable t
    join (
    select substr(book, 1, 5) as subb, min(length(book))
    FROM matable
    group by substr(book, 1, 5)
    ) subtab
     on substr(t.book, 1, 5) = subtab.subb;

    Avez vous une idée comment l'améliorer (c'est un peu urgent)?

    Merci

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 120
    Points : 9 533
    Points
    9 533
    Par défaut
    Si tu veux supprimer, il faut une requête qui commence par DELETE ...

    Si tu veux afficher un résultat , il faut une requête qui commence par SELECT. Et ce que tu as mis dans ta sous-requête semble une bonne base :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select substr(book, 1, 5) as subb
    FROM matable
    group by substr(book, 1, 5)
    Mais j'imagine que tu ne veux pas seulement la colonne Book, tu veux aussi les autres colonnes.
    Et j'imagine que tu peux avoir des cas comme ça :

    12345a
    12345b

    Les 2 codes font plus de 5 caractères, le code 12345 n'apparaît pas dans la base, et une fois tronqué à 5 caractères, les 2 lignes donnent le même code.

    Du coup, je ferais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from matable where book in 
    (  select min(book) from matable group by substr(book,1,5)  )
    Ou encore :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from matable a where not exists 
    (  select *  from matable b where substr(b.book,1,5)  = substr(a.book,1,5) and b.book < a.book   )
    Sauf erreur, ces 2 requêtes donnent strictement le même résultat, mais en rapidité d'exécution, il peut y en avoir une plus rapide que l'autre...

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup.

    C'est parfait!

    Ça m'élimine les doublons en gardant celui qui m’intéresse is celui avec 5 digits.
    Mais en plus de ça , book doit être max 5 digits donc il me reste à faire un substr pour ceux ayant le length>5 mais sans doublons soit le 47815W.
    Est-ce qu'il me faut un autre select dans une sous requête?

  4. #4
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    En fait, j'ai rajouté substr(book,1,5) au début de la requête, et ça marche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select substr(book,1,5), 
     from  matable
     where book in (  select min(book) from  matable group by substr(book,1,5)  );

    Et ça me fait penser à une autre question en sql.

    Y-a-il un moyen d'écrire : au lieu de select *
    écrire plutôt
    select book, le reste des variables


    Merci.

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 120
    Points : 9 533
    Points
    9 533
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select substr(a.book,1,5), a.*
     from  matable a
     where book in (  select min(book) from  matable group by substr(book,1,5)  );
    Cette requête renvoie substr(a.book,1,5), et toutes les colonnes de a. Et donc, entre autres la colonne book dont on ne veut pas... mais a priori, ça ne pose pas de problème.
    Ceci dit, On déconseille généralement de passer par des select * ou des select a.*
    C'est toujours plus sécurisant de spécifier la liste des colonnes à renvoyer.

  6. #6
    Futur Membre du Club
    Femme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Ok. Merci pour votre aide.

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

Discussions similaires

  1. Suppression doublons requête SQL
    Par dimferte dans le forum SQL
    Réponses: 6
    Dernier message: 02/12/2008, 10h02
  2. Tri doublons requête SQL
    Par inc002 dans le forum Bases de données
    Réponses: 10
    Dernier message: 18/07/2007, 16h35
  3. Doublon Suppression SQL
    Par Accessbaby dans le forum Requêtes et SQL.
    Réponses: 8
    Dernier message: 24/07/2006, 16h14
  4. Doublon dans Sql Serveur 2000
    Par FilipeVV dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 14/03/2006, 17h51
  5. Comment effacer les Doublons en SQL
    Par LeBigornot dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/05/2005, 10h22

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