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 :

Condition dans le outer join d'une vue


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut Condition dans le outer join d'une vue
    Bonjour

    J'ai un petit souci avec une vue.

    J'ai une vue dans la quelle interviennent 3 tables.
    Les logements
    Les hebergements (qui correspondent a une disponibilité d'un logement pour une manifestation)
    Les contacts (à qui appartiennent les logements).

    Pour un logement donné, je peux avoir les situations suivantes
    - je n'ai aucun hébergement
    - j'ai 1 hébergement
    - j'ai plusieurs hébergements

    Ma vue fonctionne bien, elle me retourne le liste de tous logements, avec des doublons s'il y a plusieurs hébergements.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    create ALGORITHM = MERGE view logementvue as 
    SELECT t1.id,t1.refpersonne , t1.nombre, t1.remarque, t1.etat, t1.type,t2.nom, t2.prenom, t2.adresse1, t2.adresse2, t2.adresse3, t2.cp, t2.ville, t2.telephone, t2.email, t4.refmanifestation , t4.id as refhebergement, t4.jeudi, t4.vendredi, t4.samedi, t4.dimanche, t4.lundi, t4.disponible
    FROM logement AS t1
    LEFT JOIN contactvue as t2 on t2.id=t1.refpersonne
    LEFT JOIN hebergement AS t4 ON t4.reflogement = t1.id

    En gros ca me retourne par exemple
    logement1 MrX Manif1 disponible
    logement2 MrX Manif1 disponible
    logement1 MrX Manif2 disponible
    logement3 MrX null null


    Mon problème c'est que je voudrais pouvoir selectionner la liste des logements "eligibles" pour une manifestation sans être poluée par les autres manifestations.

    C'est a dire que je voudrais qu'il me retourne, la liste des logements avec soit la partie hébergement renseignée si la manifestation correspond soit rien

    par exemple sur le cas au dessus je voudrais récupérer si je me préocuppe de la manif2


    logement2 MrX null null
    logement1 MrX Manif2 disponible
    logement3 MrX null null

    Si je j'appelle ma vue avec une condition par exemple (refmanif=manif3 or refmanif=null)
    je ne récupère que

    logement1 MrX Manif2 disponible
    logement3 MrX null null

    Ce qui est logique car la condition est effectuée après les jointures.

    Pour que ca marche il faudrait que ma conditions s'applique dans la jointure


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create ALGORITHM = MERGE view logementvue as 
    SELECT t1.id,t1.refpersonne , t1.nombre, t1.remarque, t1.etat, t1.type,t2.nom, t2.prenom, t2.adresse1, t2.adresse2, t2.adresse3, t2.cp, t2.ville, t2.telephone, t2.email, t4.refmanifestation , t4.id as refhebergement, t4.jeudi, t4.vendredi, t4.samedi, t4.dimanche, t4.lundi, t4.disponible
    FROM logement AS t1
    LEFT JOIN contactvue as t2 on t2.id=t1.refpersonne
    LEFT JOIN hebergement AS t4 ON t4.reflogement = t1.id and refmanifestation=Manif2
    Cette vue rend le resultat attendu.
    Mais ca n'est pas la solution car j'ai besoin de pouvoir choisir la manifestation en fonction des besoins !

    Merci d'avance de votre aide

  2. #2
    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 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Bonjour,

    A part une jointure à gauche de votre vue sur elle-même, je ne vois pas trop de solution .
    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

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

Discussions similaires

  1. Utiliser MAX() en condition dans un LEFT JOIN
    Par comode dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/05/2012, 21h49
  2. Conditions : dans le INNER JOIN ou le WHERE ?
    Par Khleo dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/12/2010, 21h50
  3. Réponses: 8
    Dernier message: 24/08/2010, 12h44
  4. Solution pour la creation de contacts dans l'AD à partir d'une vue
    Par smorin007 dans le forum Développement
    Réponses: 0
    Dernier message: 01/09/2008, 12h00
  5. Problème dans left outer join
    Par aymen007 dans le forum SQL
    Réponses: 1
    Dernier message: 21/05/2008, 12h03

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