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 :

probleme avec LEFT JOIN multi tables


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut probleme avec LEFT JOIN multi tables
    Bonjour à tous!
    Voilà j'ai un petit problème concernant un LEFT JOIn multi tables.
    Je vous présente ma requete telle qu'elle marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    "SELECT film_id, titre_nom_fr AS film_titre, image_id AS film_photo, titre_nom_fr AS film_titre_rewriting
    FROM film
    LEFT JOIN image ON image_id = film_photo
    LEFT JOIN titre ON titre_id = film_titre
    LEFT JOIN TYPE ON film_type = type_id
    WHERE film_publi = 'O'
    AND type_id =1
    ORDER BY film_titre"
    Cette requete est déjà multi tables si on peut dire et elle marche parfaitement.
    Mais pour le besoin de mon patron j'ai dû changer la structure de la base de données....GRRRrrr... Et donc j'ai du faire en sorte qu'un film puisse avoir plusieurs types (avant j'avais mon champ type dans ma table film, maintenant j'ai une table intermédiaire, vous suivez ?)
    Le probleme c'est que maintenant il faut que je rajoute une table à laquelle je vais appliquer une jointure externe...
    Fougueux comme je suis, je me suis dit que cela marcherait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    "SELECT film_id, titre_nom_fr AS film_titre, image_id AS film_photo, titre_nom_fr AS film_titre_rewriting
    FROM 
    (film
    LEFT JOIN image ON image_id = film_photo
    LEFT JOIN titre ON titre_id = film_titre
    LEFT JOIN TYPE ON film_type = type_id),
    (type_film LEFT JOIN type ON type_id=type_film_id_type)
    WHERE film_publi = 'O'
    AND type_id =1
    ORDER BY film_titre"
    Ne vous inquiétez pas je sais que cette requete...c'est du n'importe quoi, mais si je vous la montre c'est juste pour vous faire comprendre ce que je veux. Pouvoir faire plusieurs jointures externes sur des tables différentes, pas que sur la table film par exemple comme dans la 1er requete.
    J'ai juste besoin de la syntaxe, pour les tests je me demerderais.

    Merci d'avance Mesdames, mesdemoisells, messieurs!
    A bientôt, Adrien.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 407
    Points
    28 407
    Par défaut
    Si les colonnes étaient préfixées par les noms de tables, on pourrait peut être mieux comprendre...
    Ensuite, si la ligne que tu as ajoutée est en accord avec la syntaxe de ton SGBD, tu obtiens un splendide produit cartésien qui n'est sans doute pas ce que tu recherches.
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Je t'avoue que je n'ai pas pris la peine de préfixé mes noms de colonnes car tous mes noms de colonnes sont déjà préfixés. Pâr exemple la colonne id de la table `machin` s'appellera machin_id...
    Et concernant le produit cartésien, je en sais pas de quelle requete tu parles, mais si c'est de la deuxième je peux juste te dire que tu as tort car la requete ne marche pas du tout, donc impossible de vérifier ce que tu dis

    En fait je ne pense pas avoir été assez clair, mais il faut avouer que mon esprit est trop emcombré pour me le permettre.
    Essayons quand même :
    En fait dans ma première requete vous etes bien d'accord que je relie ma tabme film avec ma table image, titre et type. La syntaxe pour faire je la connais.
    Mais dans mon nouveau cas il faut que je rajoute une profondeur, c'est à dire qu'il faut que je créé une laision externe entre ma table film et ma table image, ma table film et ma table titre, ET (!!) iul faut que ej créé uen relation entre ma table film et ma table type_film (qui est la table intermédiaire entre le type et le film), et enfin entre ma table type_film et ma table type!

    C'est plus clair maintenant?
    Je veus juste rajouter une profondeur dans ma liaison, et il me manque la syntaxe J'ai du mal à trouver ca sur internet et ce forum ne propose pas de possibilité de recherche... Ou je ne l'ai pas trouvé...

    Merci d'avance à vous.

    A propos j'ai oublié de préciser que je travaille sous MySQL (phpMyAdmin) et PHP5.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 099
    Points : 28 407
    Points
    28 407
    Par défaut
    Citation Envoyé par hinsano
    ce forum ne propose pas de possibilité de recherche... Ou je ne l'ai pas trouvé...
    Ou tu as très mal cherché...
    C'est dans la barre de menu, la sixième option en partant de la gauche, la troisième en partant de la droite, entre Derniers messages et Liens rapides
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    Futur Membre du Club
    Inscrit en
    Juillet 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Ha oui....Bon ca me décrédibilise pas mal cette histoire... Pis c'est pas tres tres tres tres visible non plus....
    Et concernant ma requete ?

  6. #6
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Pas facile de t'aider sans connaître les colonnes des tables...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT film_id, titre_nom_fr AS film_titre, 
           image_id AS film_photo, titre_nom_fr AS film_titre_rewriting
    FROM film LEFT  JOIN image     ON image_id = film_photo
              LEFT  JOIN titre     ON titre_id = film_titre
              INNER JOIN type_film ON type_film_id_film = film_id)
    WHERE film_publi = 'O'
      AND type_film_id_type = 1
    ORDER BY film_titre
    La table TYPE est inutile puisque tu fais une recherche sur l'id, la jointure sur type_film n'a pas besoin d'être OUTER puisque tu imposes une condition dessus.
    J'affirme péremptoirement que toute affirmation péremptoire est fausse
    5ième élément : barde-prince des figures de style, duc de la synecdoque
    Je ne réponds jamais aux questions techniques par MP

Discussions similaires

  1. [AC-2003] Probleme avec LEFT OUTER JOIN
    Par Ardiden31 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 02/04/2012, 22h00
  2. probleme avec une vue multi tables
    Par yassinove10 dans le forum Requêtes
    Réponses: 0
    Dernier message: 21/06/2011, 16h05
  3. probleme de jointure avec left join
    Par carmen256 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 02/09/2010, 12h57
  4. [Access] Requête avec LEFT JOIN et 3 tables
    Par estelledany dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/06/2006, 13h27
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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