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

Requêtes MySQL Discussion :

requête multi table left join


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Points : 57
    Points
    57
    Par défaut requête multi table left join
    Bonjour,

    J'ai ma requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sm_image.img, sm_properties.postcode, sm_properties.address2, sm_properties.address3
    FROM sm_image, sm_properties
    LEFT OUTER JOIN sm_image ON sm_image.id_properties = sm_properties.id
    elle met retourne : MySQL a réponduocumentation
    #1066 - Not unique table/alias: 'sm_image'

    Car je voudrais n'afficher que le parent ( table sm_propreties) avec un seul de ses enfant ( table sm_image). Dans la table enfant, j'ai les images correspondantes à la propriété mais moi je veux seulement afficher son premier enfant.

    En faisant ça je me retrouve avec tous les enfant ce qui est normal :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sm_image.img, sm_properties.postcode, sm_properties.address2, sm_properties.address3
    FROM sm_image, sm_properties
    WHERE  sm_image.id_properties = sm_properties.id
    Si vous avez une idée pour moi ...

  2. #2
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    Bonjour,

    Peut-être ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT sm_image.img, sm_properties.postcode, sm_properties.address2, sm_properties.address3
    FROM sm_properties
    LEFT OUTER JOIN sm_image ON sm_image.id_properties = sm_properties.id
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  3. #3
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Effectivement, tu mélanges deux syntaxes de jointures, ce qui provoque l'erreur.
    La requête de Kazou devrait mieux passer .

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  4. #4
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Points : 57
    Points
    57
    Par défaut
    oui je n ai plus d erreur mais ma requete ne fait toujours pas ce que je veux ...
    Je vois pas comment faire pour selectionner qu un seul enfant et pas tous les enfants. Meme
    en mettant un distinct
    :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT DISTINCT sm_properties.postcode, sm_image.img, sm_properties.address2, sm_properties.address3
    FROM sm_properties
    LEFT OUTER JOIN sm_image ON sm_image.id_properties = sm_properties.id

  5. #5
    Expert confirmé

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Points : 4 324
    Points
    4 324
    Par défaut
    J'avoue que je ne parviens pas a comprendre ton problème.
    Peux-tu détailler un peu plus ce que tu cherches à faire ?
    http://alaindefrance.wordpress.com
    Certifications : SCJP6 - SCWCD5 - SCBCD5 - SCMAD1
    SDE at BitTitan

  6. #6
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Points : 57
    Points
    57
    Par défaut
    en fait j'ai une table propriété qui contient :


    id adresse code postale
    1 Paris ... 75
    2 Lille.... 59



    et une table image qui contient les images de la propriété


    id image id propriété nom image
    1 1 p1
    2 1 P2
    3 1 p2


    et donc je voudrais sélectionner par exemple paris avec une seule image et pas toutes les images.
    De facon à avoir pour chaque selection l' adresse le code postale et une seule image de la propriété

  7. #7
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    la vraie question est "comment choisis-tu l'image à afficher ?". Cependant... MySQL te permet de ne pas répondre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT sm_image.img, sm_properties.postcode, sm_properties.address2, sm_properties.address3
    FROM sm_properties
      LEFT OUTER JOIN sm_image ON sm_image.id_properties = sm_properties.id
    GROUP BY sm_properties.postcode, sm_properties.address2, sm_properties.address3
    Cette requête doit te renvoyer la première image de chaque ville, dans l'ordre de la table... donc grosso-modo, la première insérée chronologiquement, avec un truc aléatoire de temps à autres (c'est la raison pour laquelle les autres SGBDR considèreraient cette requête comme une erreur).
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Points : 57
    Points
    57
    Par défaut
    je te remercie ca fonctionne tres bien :c'est exacetement ce que je voulais.Mais peut tu me dire pourquoi en groupant il ne me sort pas la lsite des enfants ????!

  9. #9
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Je peux le dire !


    EDIT : bon, allez !

    Je n'ai pas mis sm_image.img dans le GROUP BY. Il n'y a donc qu'une ligne pour chaque propriété. Un autre SGBD réclamerait que je mette sm_image.img soit dans le GROUP BY, soit dans une fonction d'aggrégation genre MIN ou MAX, parce qu'il ne saurait pas choisir l'enfant à prendre.

    MySQL considère que tu sais ce que tu fais et prends le premier enfant qu'il trouve. C'est une optimisation pas très kasher, mais très intéressante ; par exemple, tu pourrais te contenter de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY sm_properties.id
    et ça donnerait le même résultat, sans doute plus rapidement.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 139
    Points : 57
    Points
    57
    Par défaut
    ah ok merci j'ai compris oufff lol il est très tard
    t'es un

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

Discussions similaires

  1. modifier des données dans une requête multi table
    Par Bluman dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 05/02/2008, 10h00
  2. PB requête multi-tables
    Par duchnok dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/01/2008, 12h25
  3. Requête multi-tables avec BDE
    Par Ptit_bouchon dans le forum Bases de données
    Réponses: 9
    Dernier message: 03/01/2008, 12h58
  4. Lenteur requête avec 17 LEFT JOIN. Comment l'optimiser?
    Par spitou_77 dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/10/2007, 16h44
  5. problème de requête multi-table
    Par dergips dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/07/2007, 18h21

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