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] Rechercher la valeur inférieure dans une autre table


Sujet :

Langage SQL

  1. #1
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut [Débutant] Rechercher la valeur inférieure dans une autre table
    Bonjour,

    Malgré diverses recherches, je n'ai pas trouvé de réponse à mon problème.

    Voici ma requête (simplifiée) :

    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
    16
    17
    18
    19
    20
    SELECT imm.NUMERO_DOSSIER AS Dossier
        , log.NOMBRE_PIECE AS Pièces
        , loc.NOM AS Nom
        , loc.PRENOM AS Prénom
        , coutlog1.MONTANT_LOYER_ABAISSE AS Loyer
        /*Colonne à ajouter*/
    FROM IMMEUBLE AS imm
    INNER JOIN LOGEMENT AS log
    INNER JOIN OCCUPATION AS occup
    INNER JOIN OCCUPANT as loc
    ON imm.ID = log.IMMEUBLE_ID_FK
        AND log.ID = occup.LOGEMENT_ID_FK
        AND occup.ID = loc.OCCUPATION_ID_FK
    INNER JOIN COUT_LOGEMENT AS coutlog1
    ON coutlog1.LOGEMENT_ID_FK = log.ID
    LEFT JOIN COUT_LOGEMENT AS coutlog2
    ON coutlog2.LOGEMENT_ID_FK = log.ID
        AND coutlog2.DEBUT_PERIODE > coutlog1.DEBUT_PERIODE
    WHERE coutlog2.DEBUT_PERIODE IS NULL
    ORDER BY imm.NUMERO_DOSSIER ASC;
    Ce que je désire faire, c'est d'ajouter une colonne à ma requête, la valeur de celle-ci étant la plus proche de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    coutlog1.MONTANT_LOYER_ABAISSE AS Loyer
    venant du champ `LOYER_MENSUEL` d'une table `BAREME`.

    Cette table n'a pas de jointure avec mes autres tables.

    Est-ce possible ?

    Merci d'avance de votre aide.
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Quel est vote SGBDR ?

    Vous indiquez vouloir la valeur la plus proche, mais dans votre titre, vous parlez de valeur inférieure.

    Est-ce la valeur inférieure la plus proche que vous voulez ?

    Dans ce cas, vous pouvez prendre le MAX parmis les celles inférieure à votre valeur de référence, en faisant une jointure...

    D'ailleurs, il semble manquer des conditions de jointure dans la requête que vous avez postée ?!?

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Domi2 Voir le message
    Bonjour,
    Cette table n'a pas de jointure avec mes autres tables.
    Quelle est la description de cette table barème, ? c'est impossible qu'aucun critère de jointure n'existe avec les autres tables de la base...
    Peut être que certaines clefs étrangères ont des noms exotiques mais sont bien communes avec les tables dont elles ont hérité la valeur , ça n'aide pas à construire les jointures, mais ca existe

  4. #4
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Bonjour,

    Tout d'abord, je vous prie d'accepter mes excuses pour mon manque de précision.

    La base est MySQL.

    Et pour ce qui est de la requête dans mon message précédent, j'ai essayé d'extraire la partie intéressante pour la question posée, il manque effectivement peut-être certaines choses. Mais la requête originale fonctionne parfaitement.

    Pour ce qui a trait à ma question, si je comprend bien, il faudrait que je créée une jointure entre mes deux tables, en utilisant les champs `MONTANT_LOYER_ABAISSE` et `LOYER_MENSUEL` pour ce faire. C'est bien cela ?

    Je vais essayer dans ce sens.

    Merci déjà de cette première piste.
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

  5. #5
    Expert éminent
    Avatar de StringBuilder
    Homme Profil pro
    Chef de projets
    Inscrit en
    Février 2010
    Messages
    4 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2010
    Messages : 4 154
    Points : 7 403
    Points
    7 403
    Billets dans le blog
    1
    Par défaut
    Je propose ceci (conserver la requête actuelle, et simplement rajouter les éléments ci-dessous) :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select ..., (
       select max(LOYER_MENSUEL)
       from BAREME
       where LOYER_MENSUEL <= coutlog1.MONTANT_LOYER_ABAISSE
    ) LOYER_MENSUEL
    from ...
    ...
    where ...

    Et si ça ne fonctionne pas (je ne sais pas si MySQL support sous-requpetes dans le SELECT) tu peux essayer ça :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    select ..., B.LOYER_MENSUEL
    from ...
    ...
    cross join (
       select max(LOYER_MENSUEL) LOYER_MENSUEL
       from BAREME
       where LOYER_MENSUEL <= coutlog1.MONTANT_LOYER_ABAISSE
    )
    where ...

    Seul bémol, bien faire attention d'avoir un barème pour LOYER_MENSUEL = 0, sinon il pourrait y avoir des lignes qui sautent.
    On ne jouit bien que de ce qu’on partage.

  6. #6
    Expert éminent sénior
    Avatar de Domi2
    Homme Profil pro
    Gestionnaire
    Inscrit en
    Juin 2006
    Messages
    7 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : Suisse

    Informations professionnelles :
    Activité : Gestionnaire
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 194
    Points : 16 040
    Points
    16 040
    Par défaut
    Bonjour,

    La première proposition fonctionne parfaitement, c'est exactement ce qu'il me fallait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (SELECT MAX(REVENU_MAX) 
           FROM BAREME_AIDE AS bareme
           WHERE LOYER_MENSUEL <= coutlog1.MONTANT_LOYER_ABAISSE AND bareme.TYPE_AIDE_ID_FK = 1 AND bareme.DATE_FIN IS NULL
           ) Limite_revenu
    Grand merci.
    Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

    Ici, on ne perd pas de temps ! On en passe...


    Access : créer des codes-barres 128 en VBA
    Access : les commandes intégrées des menus

    Ce message (ou un autre) vous a aidé ? Votez pour lui avec

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

Discussions similaires

  1. recherche de valeur non présentes dans une autre table
    Par omelhor dans le forum Requêtes
    Réponses: 2
    Dernier message: 16/02/2015, 10h51
  2. Impossible d'afficher une valeur existe dans une autre table
    Par mcharmat dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 06/02/2013, 06h38
  3. Valeur par défaut à prendre dans une autre table
    Par louroulou dans le forum Access
    Réponses: 6
    Dernier message: 19/07/2006, 10h38
  4. Réponses: 3
    Dernier message: 13/06/2006, 16h36
  5. Selection d'une valeur dans une autre table
    Par beurnoir dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h02

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