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 :

Besoin d'aide pour une requete tordue


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut Besoin d'aide pour une requete tordue
    Dans un coin de la base de donnée, j'ai deux tables :

    MACHINE(ID_MACHINE,LIB_MACHINE,DE_PRET booleen)
    PRET(ID_PRET,DATE_PRET,RENDU booleen,ID_MACHINE)

    Une machine peut ne jamais avoir été prété.
    MACHINE.DE_PRET = vrai signifit que la machine peu etre prêté.

    Je voudrais faire une requete qui me renvoit toutes les machines, avec ou sans pret, sans doublons, avec une mention qui me permet de savoir si la machine est actuelement prêté ou non.

    dur dur

    je ne vous montre pas mes différents echecs afin de ne pas vous influancer dans vos idées ;o

    merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Intéressez vous aux jointures externes gauches...
    A lire : http://sqlpro.developpez.com/cours/s...ointures/#L2.3

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    112
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 112
    Par défaut
    Je pense a quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     select distinct m.id_machine, m.lib_machine, p.rendu from machine m
    left join pret p on (m.id_machine = p.id_machine);

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut
    Citation Envoyé par Kiroukool Voir le message
    Je pense a quelque chose du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     select distinct m.id_machine, m.lib_machine, p.rendu from machine m
    left join pret p on (m.id_machine = p.id_machine);
    Merci de ton aide aussi rapide.
    C'est exactement ce que j'ai essayé de faire.

    Si je ne met pas le distinct, je me retrouve avec plusieurs fois chaque machine (autant qu'il y a de pret pour la machine en fait), et si je met le distinct, toutes les informations que je recois, autre que ID_MACHINE sont nules.

    Si une machine a été prêté plusieures fois, et n'a pas été rendu la derniere fois. quelle valeur prendra p.rendu ?

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    Il ne peut y avoir qu'une ligne de PRET où RENDU est FALSE ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT    m.id_machine
        ,    m.lib_machine
        ,    CASE
                WHEN m.de_pret = FALSE    THEN 'non prêté'      
                WHEN m.de_pret = TRUE    AND p.rendu IS NULL    THEN 'rendu'
                WHEN p.rendu = FALSE    THEN 'prêté'
            END 
    FROM    machine    AS m
        LEFT JOIN 
            pret    AS p 
            ON    m.id_machine = p.id_machine
            AND    p.rendu    = FALSE
    ;
    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.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 24
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    Il ne peut y avoir qu'une ligne de PRET où RENDU est FALSE ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    SELECT    m.id_machine
        ,    m.lib_machine
        ,    CASE
                WHEN m.de_pret = FALSE    THEN 'non prêté'      
                WHEN m.de_pret = TRUE    AND p.rendu IS NULL    THEN 'rendu'
                WHEN p.rendu = FALSE    THEN 'prêté'
            END 
    FROM    machine    AS m
        LEFT JOIN 
            pret    AS p 
            ON    m.id_machine = p.id_machine
            AND    p.rendu    = FALSE
    ;

    oui, il ne peut y avoir qu'un pret non rendu (normalement )
    par contre, je connaissais pas "WHEN ... THEN..." :o
    je vais tester ca ;o

    merci.

Discussions similaires

  1. Besoin d'aide pour une requete
    Par fabris dans le forum Requêtes
    Réponses: 1
    Dernier message: 20/04/2006, 20h15
  2. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/04/2006, 20h27
  3. besoin d'aide pour une requete
    Par Pigoulou dans le forum Requêtes
    Réponses: 2
    Dernier message: 24/02/2006, 20h34
  4. Besoin d'aide pour une requete
    Par Okhotsk dans le forum Langage SQL
    Réponses: 3
    Dernier message: 02/11/2005, 16h30
  5. Besoin d'aide pour une requete
    Par jnc dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/07/2005, 11h54

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