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 :

Comment récupérer des doublons relatifs selon un critère supplémentaire ?


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut Comment récupérer des doublons relatifs selon un critère supplémentaire ?
    J'ai des tables dans ce style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE auteur
    ( id INTEGER NOT NULL PRIMARY KEY,
    nom VARCHAR(16),
     prenom MCH_NOM VARCHAR(16))
     
    CREATE TABLE passion
    (id_auteur INTEGER NOT NULL,
     descrip TEXT)
    J'ai cherché à récupérer tous les auteurs ayant le même nom et la même passion mais...je ne vois pas comment faire ! Pour l'instant j'en suis là:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    WITH multiname AS(
     SELECT auteur.nom,passion.descrip 
     FROM auteur 
     JOIN passion ON auteur.id = passion.id_auteur 
     WHERE nom IN (
      SELECT nom 
      FROM auteur 
      GROUP BY nom HAVING COUNT(nom) > 1
     )
    )
    SELECT * 
    FROM multiname 
    WHERE descrip IN (
     SELECT descrip 
     FROM multiname 
     GROUP BY nom,descrip HAVING COUNT(*) > 1
    )
    Mais ça m'a l'air à la fois inutilement compliqué et très imparfait (ne récupère pas les descrip NULL par exemple). Je bloque !

  2. #2
    Membre chevronné Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Points : 2 071
    Points
    2 071
    Par défaut
    J'ai cherché à récupérer tous les auteurs ayant le même nom et la même passion mais...je ne vois pas comment faire
    Précise :
    Tu veux tous les auteurs ayant une même passion précise (variable) ex le tricot () ?
    Ou
    toutes les passions qui interessent au moins deux auteurs ayant le même nom ?
    Garuda गरूड
    Brahmâ la Guerre et Vishnu la Paix

    Oracle 12C R2 - Forms11GR2 - Toad 12 - sharePoint 2010

  3. #3
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par tempirate Voir le message
    descrip TEXT
    C'est quoi TEXT? Tu es bien dans Oracle, non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select nom,descrip 
    from auteur join passion on (id=id_auteur) 
    having count(*) > 1 
    group by nom,descrip;

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2004
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 17
    Points : 8
    Points
    8
    Par défaut
    Desole je decouvre Oracle quel est lequivalent du TEXT MySQL ?

    Je vais essayer ta proposition mais je croyais que group by ne renvoyait qu'un seul des resultats similaires (par exemple si j'ai trois Dupont un group by nom me renverra une seule ligne avec Dupont. Ce n'est pas le cas ?)

  5. #5
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    l'équivalent serait le type LONG, mais il est conseillé d'utiliser CLOB plutôt que LONG. LONG est en voie d'extinction depuis la version 8.

    CLOB a de nombreux avantages. On peut l'employer dans des fonctions (style substr). Un des inconvénient de CLOB est peut-être sa portabilité (si ton client est indépendant de la base de données)

    Le plus simple est le type VARCHAR2(4000) si ta description ne dépasse pas 4000 charactères.

    Hélas, ma fonction ne marchera ni avec un LONG ni avec un CLOB

    Si tu employes un CLOB, un admettant qu'il n'y ait pas de passions qui commencent par les mêmes quatre mille premier caractères, tu peux aussi faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select nom,cast(substr(descrip,1,4000) as varchar2(4000)) 
    from auteur join passion on (id=id_auteur) 
    having count(*) > 1 
    group by nom,cast(substr(descrip,1,4000) as varchar2(4000));

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    Citation Envoyé par tempirate Voir le message
    par exemple si j'ai trois Dupont un group by nom me renverra une seule ligne avec Dupont. Ce n'est pas le cas ?)
    si, mais je ne fais pas un GROUP BY NOM, je fais un GROUP BY NOM,PASSION.

    Donc si tu as trois DUPONT dont 2 qui jouent aux échecs et 2 qui jouent aux dames, tu aura alors 2 lignes, DUPONT-ECHECS et DUPONT-DAMES

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/04/2010, 22h02
  2. comment récupérer mes doublons
    Par cakeke dans le forum Oracle
    Réponses: 2
    Dernier message: 01/12/2005, 16h12
  3. Comment Récupérer des varaibles d'un script à un autre
    Par scratch_1 dans le forum Langage
    Réponses: 6
    Dernier message: 16/11/2005, 18h26
  4. Comment récupérer des données de Outlook Express ?
    Par frenchsting dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 29/04/2005, 12h07
  5. Réponses: 6
    Dernier message: 28/09/2003, 18h49

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