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 :

[Débutant] doublon sur deux colonnes


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut [RESOLU] doublon sur deux colonnes
    Bonjour tlm

    Dsl pour cette faq j'ai tourné 2h j'pige tjrs pas - bien trouvé un topic qui citais cet exemple mais sans réponse....et merci evidemment à tous ceux qui prennent du temps pour y répondre - la question étant basique hésitez pas à passer si vous avez quelque chose de vraiment important à faire ha ha

    Bref & comme je viens pour pleurer mon pb est donc le suivant

    ma_table , 2 champs
    c1 c2
    A B
    B A

    comment faire un select pour garder une seule des deux lignes?liggne A B ou ligne B A - et trouver un lien pour le tuto du débutant très très basique.


  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Salut,

    tu as deux solutions.

    La premiere constite à extraire la ligne qui t'interresse grace à la clause LIMIT

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT c1,c2
    FROM ma_table
    LIMIT 0,1
    Tu indiques ici que tu veux extrait les 2 champs de la tables en ne prenant que les lignes à partir de 0 jusqu'à 1, tu as donc A-B de retourner.

    En changeant les indexs 0,1 du limit part 1,2 tu auras en retour B-A

    Le deuxieme solution consiste à filtrer les retours avec la clause where sur un champ de ta table
    Exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT c1,c2
    FROM ma_table
    WHERE c1="A"
    Voila tu peux filtrer sur n'importe quelle colonne (c1 ou c2), mais si tu as plusieurs lignes avec c1 = A, le SGBD te retournera tout ces lignes.

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 743
    Points
    11 743
    Par défaut
    Attention, LIMIT n'est pas normalisé et n'existe que dans certains SGBD (de tête, MySQL, mSQL et PostGreSQL). Quel est le tien ?
    Antoun
    Expert Tableau, Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Re-bonjour et merci pour vos réponses c'est très sympa - j'utilise une base de donnée Mysql.(avec le programme SQLyog désolé pour la publicité hésitez pas à éditer)

    Egalement j'aurais du être plus précis dans ma formulation.

    Ma table à deux champs ne contiens évidemment pas que ces deux lignes.
    mais plutot ~2000 se présentant sous cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ma_table
    A B
    B A
    C A
    A C
    B C
    C B
    etc.....
    L'objectif étant de ne garder qu'une seule ligne sur les multiples lignes ou apparaissent deux meme valeurs - pour cet exemple ca nous donnerais quelque chose comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ma_table
    A  B
    C  A
    B  C

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Salut, je ne savais pas que le LIMIT n'etait pas normalisé, c'est toujours ça de pris.

    si tu veux filter les ligne sur deux champs, du doit utiliser les clause where et and

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    select c1,c2
    from ma_table
    where c1="A"
    and c2="B"
    Tu filtres ainsi les réponses sur les deux champs.

    @+

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    normalisé ou pas vous avez bien compris que ces mots dépassais largement mes domaines de compétences - quoi qu'il en soit merci pour vos réponses.

    Nico.G le pb avec ta methode c'est que sur les 2000 entrées de la table j'ai donc environ 1000 doublons - je cherchais justement une requete qui m'évite de faire un select valeur par valeur

    si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c1,c2
    FROM ma_table
    WHERE c1="A"
    AND c2="B"
    je devrais le faire pour les 1000 entrées une par une non ? et appliquer par exemple la requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT c1,c2
    FROM ma_table
    WHERE c1="C"
    AND c2="A"
    pour ne conserver que C A sur les deux lignes
    C A
    A C
    et ainsi de suite pour tous les doublons? ou j'ai peut etre mal interprété ta réponse - dsl si c'est le cas evidemment.

    ++

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 9
    Points : 11
    Points
    11
    Par défaut
    Salut,

    J'ai eu du mal a comprendre ce que tu voulais.
    Malheuresement je ne vois pas de solution à ton problème, je vais continuer à y réflechir et je continue a suivre le thread parceque la solution m'interresse.

  8. #8
    J1
    J1 est déconnecté
    Membre averti Avatar de J1
    Inscrit en
    Mai 2004
    Messages
    321
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 321
    Points : 335
    Points
    335
    Par défaut
    Bonjour,

    en SQL Access, j'écrirais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT
    	IIF(c1<c2 OR c1 IS NULL, c1, c2),
    	IIF(c1<c2 OR c1 IS NULL, c2, c1)
    FROM ma_table
    Ce qui doit, si je ne me trompe, se traduire ainsi sous MySQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT DISTINCT
    	IF(c1<c2 OR c1 IS NULL, c1, c2),
    	IF(c1<c2 OR c1 IS NULL, c2, c1)
    FROM ma_table
    Je te laisse t'assurer que ça répond bien à ta problématique.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2008
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup Mr - c'est absolument ca

    petite table de test
    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
    DROP TABLE IF EXISTS `ma_table`;
     
    CREATE TABLE `ma_table` (
      `c1` int(11) default NULL,
      `c2` int(11) default NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
    /*Data for the table `ma_table` */
     
    insert  into `ma_table`(`c1`,`c2`) values (1,2);
    insert  into `ma_table`(`c1`,`c2`) values (2,1);
    insert  into `ma_table`(`c1`,`c2`) values (3,1);
    insert  into `ma_table`(`c1`,`c2`) values (1,3);
    insert  into `ma_table`(`c1`,`c2`) values (4,2);
    insert  into `ma_table`(`c1`,`c2`) values (2,4);
    apercu de la table obtenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ma_table
    c1 c2
    1  2
    2  1
    3  1
    1  3
    4  2
    2  4
    resultat de la requete de J1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    IF(c1<c2 OR c1 IS NULL, c1, c2) 	IF(c1<c2 OR c1 IS NULL, c2, c1)
    1 	                                2
    1 	                                3
    2 	                                4
    & Merci encore à tlm pour vos réponses et au forum pour son acceuil - c'etais très sympa.


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

Discussions similaires

  1. [AC-2003] Condition de NON doublon sur deux colonnes de facon simultanee :
    Par Bonero dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 26/01/2012, 14h28
  2. [XL-2007] Doublons sur deux feuilles avec 26 colonnes chacunes
    Par jimmycamelon dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 04/03/2011, 16h56
  3. [Tableaux] Array sur deux colonnes et foreach..
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2006, 08h46
  4. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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