Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de doublons

SQL et jointures

Sujet résolu
    17 novembre 2010 à 21:40:02

    Bonjour,

    Je découvre la nouvelle manière de faire des jointures en SQL (avec INNER JOIN etc..) et j'ai un petit problème de requête SQL ! :euh:

    Imaginons que j'ai une table "objets" et une table "photosObjets". Un objet possède soit 0 soit N (1 ou plusieurs) photos. Une photo appartient à un seul.

    Si je possède un objet "voiture" qui a 3 photos, la requête suivante affichera 3 fois l'objet voiture :

    SELECT *			
    FROM objets 
    LEFT OUTER JOIN photosobjets USING (idObjet)
    


    Comment faire pour supprimer les doublons ? (tout en gardant "SELECT *" (et donc en n'utilisant pas "DISTINCT" ?))

    Merci d'avance,

    bye.
    • Partager sur Facebook
    • Partager sur Twitter
      17 novembre 2010 à 23:12:11

      Pour supprimer les doublons, il faut utiliser SELECT DISTINCT, y'a pas de photos.

      Par contre, 'faudrait nous donner plus d'informations. Tu fais une jointure, c'est tout à fait normal que si "voiture" a trois photos, qu'il y ait 3 lignes concernant "voiture" retournées. Ce n'est pas un doublon.
      • Partager sur Facebook
      • Partager sur Twitter
        18 novembre 2010 à 15:17:49

        Dans ma base, j'ai un objet "voiture" avec 3 photos et un objet "bateau" sans photo.
        Je voudrais afficher tous les objets de ma base (c'est à dire avoir 2 résultats) avec les informations de photos car je veux pouvoir montrer UNE SEULE des photos en rapport avec l'objet.

        Comment faire ?
        • Partager sur Facebook
        • Partager sur Twitter
          18 novembre 2010 à 15:25:24

          Quelle est la structure de tes tables et que veux tu récupérer exactemetn comme infos ?
          • Partager sur Facebook
          • Partager sur Twitter
            18 novembre 2010 à 15:44:55

            Je veux juste savoir si il y autre moyen que "DISTINCT" pour supprimer les doublons.
            • Partager sur Facebook
            • Partager sur Twitter
              18 novembre 2010 à 16:00:22

              NON, group by te permet de les regrouper mais sinon c'est distinct
              • Partager sur Facebook
              • Partager sur Twitter
                18 novembre 2010 à 16:03:50

                Pourquoi t'as édité ton message ?? Si je te demande tes tables, c'est peut-être parce qeu je réfléchis à une solution et que je veux être sûr que ça marchera dans ton cas. Tu crois pas ??

                Mais bon, tant pis...
                • Partager sur Facebook
                • Partager sur Twitter
                  18 novembre 2010 à 16:09:00

                  Citation : Starlogix

                  [...] je veux pouvoir montrer UNE SEULE des photos en rapport avec l'objet.


                  Et comment comptes-tu choisir cette photo ? Le SGBDR fait exactement ce que tu lui demandes et selon les informations que tu nous as données, il n'y a aucun doublon dans ce que la requête renvoie. Ce n'est pas parce qu'il y a trois fois "voiture" (comportement tout à fait normal et logique) que c'est un doublon.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    18 novembre 2010 à 16:12:21

                    Je pense avoir compris sa base de donnée ( avec du mal :s)

                    Voiture photo1
                    Voiture photo2
                    Voiture photo3
                    Bateau photo4

                    c'est sa?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      18 novembre 2010 à 16:15:19

                      @fozzeuh Ca c'est ce que je ne veux pas.

                      @Fayden

                      Inutile de me répéter que la BDD fait ce que je lui demande, j'imagine qu'elle ne fait pas exprès de m'embêter et qu'elle se contente de faire son boulot. Ce que j’appelle ici "doublons" ce sont des résultats semblables qui me gène dans une requête.

                      @Taguan

                      Imaginons que j'ai une table "objets" avec "idObjet" et "nombObjet". Une table "photosobjets" avec "idPhotoObjet", "nomPhoto", "idObjet".

                      Dans ma base, j'ai un objet "voiture" avec 3 photos et un objet "bateau" sans photo.

                      Comment afficher mes deux objets (donc seulement 2 résultats dans ma requête) et pouvoir utiliser les informations de photos pour chaque objet ?

                      On peut imaginer comme résultat à la requête que je souhaiterai :

                      1 voiture photo1 photo2
                      2 bateau NULL(pas de photo)
                      • Partager sur Facebook
                      • Partager sur Twitter
                        18 novembre 2010 à 16:17:24

                        essai un group by voir ce que as te renvoi et met le résultat.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          18 novembre 2010 à 16:20:07

                          @fozzeuh J'avais oublié "GROUP BY", merci bien !

                          La bonne requête est :

                          SELECT *
                          FROM objets
                          INNER JOIN photosobjets USING (idObjet)
                          GROUP BY idObjet
                          
                          • Partager sur Facebook
                          • Partager sur Twitter
                            18 novembre 2010 à 16:23:50

                            Cette requête ne veut rien dire du tout, d'ailleurs elle ne passerait pas sous d'autres SGBDR que MySQL. Elle marche grâce au laxisme de MySQL.

                            Si tu avais lu mon message correctement, tu aurais lu "Et comment comptes-tu choisir cette photo ?". Si je te dis que le SGBDR agit comme cela, c'est bien pour te montrer que tu ne fournis pas assez d'infos pour pouvoir sélectionner correctement une ligne.

                            La requête avec GROUP BY groupe effectivement par idObjet, mais remplit les autres colonnes de valeurs dénuées de sens (la première rencontrée, en l'occurrence). C'est plutôt aléatoire et définitivement pas une méthode "propre".
                            • Partager sur Facebook
                            • Partager sur Twitter
                              18 novembre 2010 à 16:31:59

                              Met ton sujet en résolut ;)
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Problème de doublons

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown