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 :

Casse tête chinois


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juin 2008
    Messages : 171
    Points : 65
    Points
    65
    Par défaut Casse tête chinois
    Bonjour,

    J'ai une table TEST avec 3 colonnes ID1, ID2, ID3.

    La table contient les données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    insert into table TEST values('PW','ATH','MIMA');
    insert into table TEST values('ATH','MIMA','PW');
    insert into table TEST values('ATH','FLEG','BGO');
    insert into table TEST values('CMZ','FLEG','BGO');
    insert into table TEST values('JLJ','PM','BDR');
    2 lignes contiennent les même valeurs 'ATH', 'PW' et 'MIMA' mais pas dans les mêmes colonnes.

    Je voudrais, par requête, obtenir une seule ligne avec le couple 'ATH', 'PW', 'MIMA'.

    Merci de votre aide.

  2. #2
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2006
    Messages : 62
    Points : 75
    Points
    75
    Par défaut
    Tu peut utiliser une sous requête avec des union

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select distinct
     
    from (
    select ID1, ID2, ID3
    from ...
     
    union 
     
    select ID1, ID3, ID2
    from ...
     
    etc...)
    Mais il y a surement une méthode plus simple

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    171
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Juin 2008
    Messages : 171
    Points : 65
    Points
    65
    Par défaut casse tête chinois
    Merci de répondre,

    Peux-tu être un peu plus explicite sur ta réponse ?

    Merci.

  4. #4
    Scorpi0
    Invité(e)
    Par défaut
    Salut,

    Comme ça peut être :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    select col1, col2, col3
    from 
    (
    select ID1 as col1, ID2 as col2, ID3 as col3
    from MyTable
     
    union
     
    select ID1, ID3, ID2
    from MyTable
     
    union
     
    select ID2, ID1, ID3
    from MyTable
     
    union
     
    select ID2, ID3, ID1
    from MyTable
     
    union
     
    select ID3, ID1, ID2
    from MyTable
     
    union
     
    select ID3, ID2, ID1
    from MyTable
    )
    group by col1, col2, col3
    having  count(1)>1
    Dernière modification par Scorpi0 ; 26/09/2008 à 16h42.

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Une seule requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT * FROM WMC_TEST
     
    ID1	ID2	ID3
    PW	ATH	MIMA
    ATH	MIMA	PW
    ATH	FLEG	BGO
    CMZ	FLEG	BGO
    JLJ	PM	BDR
    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
    18
    19
    SELECT ordre, 
    	SUBSTR(ordre, 1, INSTR(ordre, CHR(1)) -1) AS id1,
    	SUBSTR(ordre, INSTR(ordre, CHR(1)) +1, INSTR(ordre, CHR(1),-1) -INSTR(ordre, CHR(1))-1)  AS id2,
    	SUBSTR(ordre, INSTR(ordre, CHR(1), -1) +1) AS id3
    FROM
    (SELECT CASE WHEN id1 <= id2 AND id2 <= id3 THEN id1 ||CHR(1)|| id2 ||CHR(1)|| id3
    	WHEN id1 <= id3 AND id3 <= id2 THEN id1 ||CHR(1)|| id3 ||CHR(1)|| id2
    	WHEN id2 <= id1 AND id1 <= id3 THEN id2 ||CHR(1)|| id1 ||CHR(1)|| id3
    	WHEN id2 <= id3 AND id3 <= id1 THEN id2 ||CHR(1)|| id3 ||CHR(1)|| id1
    	WHEN id3 <= id2 AND id2 <= id1 THEN id3 ||CHR(1)|| id2 ||CHR(1)|| id1
    	WHEN id3 <= id1 AND id1 <= id2 THEN id3 ||CHR(1)|| id2 ||CHR(1)|| id1
           END   AS ordre
    FROM wmc_test
    )
    GROUP BY ordre
    HAVING COUNT(*) > 1
     
    ORDRE		ID1	ID2	ID3
    ATH|MIMA|PW	ATH	MIMA	PW
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par mortimer.pw Voir le message
    Je voudrais, par requête, obtenir une seule ligne avec le couple 'ATH', 'PW', 'MIMA'.
    Une précision linguistique, le couple se limite a deux éléments (sinon c'est la guerre à la maison).
    Lorsqu'on a trois éléments on parle de triplet, lorsqu'on a N éléments on parle de N-uplet.

Discussions similaires

  1. [1.x] embedForm / mergeForm => casse tête chinois
    Par erictomcat dans le forum Symfony
    Réponses: 17
    Dernier message: 08/02/2011, 23h56
  2. SMSLIB casse tête chinois
    Par yashiro dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 02/11/2007, 11h45
  3. Casse tête chinois
    Par Jahjouh dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 15/03/2006, 09h04
  4. Classe, pile, pointeurs et casse-tête!
    Par zazaraignée dans le forum Langage
    Réponses: 6
    Dernier message: 26/09/2005, 16h57
  5. casse-tête excel
    Par gregius dans le forum Access
    Réponses: 2
    Dernier message: 21/09/2005, 16h38

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