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 :

Suppression doublons>3 ==> Ora-00913: too many values ..


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut Suppression doublons>3 ==> Ora-00913: too many values ..
    Bonjour,

    je suis actuellement en stage à France Télécom, et je dois traiter une table assez conséquente dans ma base de données (plusieurs millions de lignes).
    Pour celà je commence par la nettoyer afin de supprimer quelques mauvaises valeurs, tels que des doublons!

    Le problème, c'est que ces doublons ne sont pas tous en doubles Il n'est pas rare de trouver des valeurs identiques 4,5,6, voir 700 fois dans la table..

    J'ai alors décidé de supprimer tous les doublons qui apparaissent plus de 3 fois dans ma table donc je garde les doublons qui apparaissent 2 et 3 fois, mais ça je pense que vous aviez compris ).. Pour des raisons de confidentialités, le champ de la table concerné par les doublons s'appellera "ID", et la table en question s'appellera "Ma_table".


    Voici la requête que j'ai faite (je suis sous Oracle10g, via Sql*Plus) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    DELETE FROM Ma_table
    WHERE ID IN (
    SELECT ID,COUNT(*) FROM Ma_table GROUP BY ID HAVING COUNT(*)>3);
    Seulement j'obtiens la réponse suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ORA-00913: too many values
    Une solution à ce problème?.. Merci beaucoup de votre (future) aide

  2. #2
    Membre expérimenté

    Profil pro
    Administrateur de base de données
    Inscrit en
    Septembre 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Septembre 2008
    Messages : 169
    Par défaut
    le IN est limité a 1000 valeurs
    tu a des ligne en plus de mille exemplaires

    il faut que tu passe par un programme qui les delete une par une ou qui cree une requete avec des OR a la place du IN

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut
    Arf c'est embêtant..

    D'autant plus que ces doublons se trouvent n'importe où dans le fichier.. donc je peux pas faire de requête du type "analyser la valeur courante de l'ID et regarder si elle est plusieurs fois dans le fichier".. ça serait beaucoup trop long de re-scanner tout le fichier à chaque valeur..

    Une requête avec des OR servirait à quoi? Tu pense à un truc du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM Ma_table
    WHERE ID="X" OR ID="XX" OR ID="XXX" ...etc ?
    Car si oui ça serait beaucoup trop long (ça me ferait une requête avec plusieurs milliers de OR )
    Merci de ton aide en tout cas

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut
    Ah je viens de comprendre pour l'histoire du programme et des OR..

    Tu parles en fait d'un programme qui me ferait la requête tout seul (donc la requête avec plusieurs milliers de OR), c'est ça?

    Si oui je veux bien, mais même si je faisais ça en java, en C, ou en Php, je serais bien embêté.. En effet, cette fameuse table est supprimée puis recréée dans la Base De Données environ 1 fois par mois! Donc si chaque mois il faut d'abord l'importer sous Oracle, puis ensuite la traiter avec encore un autre logiciel, ça risque de prendre du temps...

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    le IN est limité a 1000 valeurs
    Le IN est limité en valeur quand on saisit des valeurs une à une, il n'y a aucune limitation via une sous-requête.

    Le problème est plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ID IN (SELECT ID,COUNT(*)
    Vous demandez à Oracle de comparer ID (une colonne) à ID et count(*) (deux colonnes), d'où le message d'erreur.

    Vous pourriez modifier votre select ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM Ma_table
     WHERE ID IN (SELECT ID FROM Ma_table GROUP BY ID HAVING COUNT(*)>3);
    Mais attention, là vous ne faites plus du dédoublonnage.
    Vous allez supprimez toutes les valeurs, en général quand on dédoublonne on en garde quand même une !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Par défaut
    Merci waldar
    Effectivement ça paraît logique, je comparais 1 champ avec deux
    Je test tout celà tout à l'heure (je dois supprimer ma table puis la refaire, étant donné que j'ai modifié des choses entre-temps dedans).

    Et sinon oui je veux carrément supprimer les valeurs apparaissant plus de 3 fois dans la table. Si je fais ça c'est parce qu'ici si ma table comporte des valeurs en triple (ou plus) celà signifie dans mon cas que ces valeurs sont erronnées (donc aucune à garder).

    Merci à tous pour votre aide, je vous tiendrais au courant du résultat

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

Discussions similaires

  1. [Python 2.X] too many values to unpack
    Par Sh0rtY dans le forum Général Python
    Réponses: 5
    Dernier message: 07/07/2014, 19h22
  2. Trigger pour suppression doublons ds table
    Par lg_gaelle dans le forum PL/SQL
    Réponses: 2
    Dernier message: 18/10/2006, 15h53
  3. Suppression doublon Table
    Par francois78 dans le forum Access
    Réponses: 11
    Dernier message: 13/06/2006, 16h16
  4. Suppression doublons
    Par osmoze dans le forum Oracle
    Réponses: 2
    Dernier message: 26/04/2006, 13h17
  5. [MySQL] Problème de syntaxe dans suppression doublons
    Par fred23195 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 13/04/2006, 15h45

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