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

Langage SQL Discussion :

Requetes complexes sur Base


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut Requetes complexes sur Base
    Je ne sais pas si je dois mettre mon message ici, ou sur le topic Oracle.
    J'ai une table -dont les champs sont des varchar2- qui contient plus d'une douzaine de millions d'enregistrements, je dois en supprimer plusieurs millions, j'ai essaye de faire un order by sur un champs ou un autre mais il y a une erreur a chaque fois.
    Quelqu'un sait il comment manipuler ce genre de requetes.
    Je ne peux pas creer un champs numerique, je sais qu'il y a moyen de faire ca sous Oracle, mais je ne sais pas comment.
    Cordialement

    PS: J'ai pense aux sequences sous Oracle, mais je ne sais pas si c'est conventionnelle en SQL.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 44
    Points
    44
    Par défaut
    Tu veux faire quoi exactement ? Une suppression ? Un ORDER BY ?
    Colle ta requête pour qu'on puisse t'aider stp

  3. #3
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    C'est tres simple j'ai une table de plus de dix millions d'enregistrements, je veux retirer 6 millions d'enregistrements a cette table.
    J'avais initialement pense qu'il fallait trier la table en fonction de tel ou tel critere, puis supprimer les enregistrements superieur a X.
    Or le order by ne marche pas parce que mes champs sont en varchar2.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 44
    Points
    44
    Par défaut
    Euh ouais mais je vois pas du tout l'intérêt de l'ORDER BY dans ce cas.
    ORDER BY c'est pour une requête de sélection et non pas de suppression.
    Donne la structure de ta table et explique exactement quelles lignes tu veux supprimer et le critère.

  5. #5
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    Je sais qu' Order by c'est pour trier et non supprimer.
    Mais imaginons que tu ais 15 millions d'enregistrements, et on doit en supprimer 6, dont les champs sont tous des chaines de caracteres. Comment faire ???
    La premiere idee qui vient en tete est definir un critere de tri, qui dit qu'a partir de la derniere, donc la plus grande ou la 8 millionnieme on supprime six millions.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 44
    Points
    44
    Par défaut
    Donne précisément ta table et ton critère parce qu'on pourra jamais t'aider comme ça.
    Donne la structure de ta table (le script de création de ta table, ça serait parfait) et le critère PRECIS sur lequel tu veux faire des suppressions.

  7. #7
    Membre confirmé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Points : 546
    Points
    546
    Par défaut
    tu veux en supprimer 6 milllions au hasard ou t'as un vrai critère de suppression ?

    Le mieux serait peut-être de copier ta table vers une table temporaire, puis de vider ta table (truncate ?), puis d'y insérer les 6 millions de lignes de la table temporaire...

  8. #8
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    Tout d'abord merci pour vos interventions a tous
    En fait j'ai fini par trouver une solution qui est semble t'il specifique a Oracle. En effet Oracle associe a chaque une table une pseudo colonne appellee rownum qui est numerique, dont il est tres aisee de manipuler et de supprimer les enregistrements comme je voulais le faire auparavant.
    Par contre c'est sure que si j'etais sous environnement mysql, ou postgres, ou autre je ne sais pas ce qu'il aurait fallu faire.

    Bien cordialement

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 44
    Points
    44
    Par défaut
    Faux problème résolu alors

  10. #10
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    C'est vrai, puisque ma solution requiert une installation Oracle, ce qui ne va pas sans consequence, je suis entierement d'accord avec toi, avec le fait de dire que c'est un faux probleme resolu.
    Ceci etant j'ai ebauche l'esquisse d'une solution qui consistait a creer une colonne temporaire numerique, qu'on remplissait via des update par une fonction en oracle qui existe a peu pres partout c'est nextval, et curval. Puis je triais et supprimais en fonction de cette derniere colonne.
    Solution bien peu elegante au regard de ce que permet sql et de vos connaissances qui sont certainement plus a meme de repondre a cette problematique.
    Voili voila

    Cordialement.

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

Discussions similaires

  1. Requete sql sur base oracle
    Par kiro4 dans le forum SQL
    Réponses: 4
    Dernier message: 18/03/2009, 08h59
  2. question requete complexe sur champ varchar
    Par pazgal dans le forum Langage SQL
    Réponses: 20
    Dernier message: 14/10/2008, 17h09
  3. requete complexe sur 3 tables
    Par oasma dans le forum Langage SQL
    Réponses: 5
    Dernier message: 14/04/2007, 21h51
  4. Requete SQL sur base SQL Server VB6
    Par Yanmeunier dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 25/11/2005, 12h30
  5. Requete ASP sur Base SQL
    Par smast2005 dans le forum ASP
    Réponses: 8
    Dernier message: 22/02/2005, 11h03

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