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

SQL Oracle Discussion :

Création d'une sous-requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut Création d'une sous-requête
    Bonjour,
    Dans ma base de données, je possède une table « personnes » et une table « travaux ». Une personne effectue 0 ou n travaux, un travail est effectué par une et une seule personne :

    Personnes :
    - id_pers
    - nom_pers
    - prenom_pers

    Travaux :
    - id_trav
    - pers_id
    - nom_trav
    - etat_trav ("en cours" ou "terminé")

    Je souhaiterai faire une requête SELECT qui sélectionne toute les personnes qui ont un ou plusieurs travaux dont l'état est « en cours ».

    Comment faire cela ? Je pense qu’il faut faire une sous-requête (requête imbriquée) mais je n’y arrive pas…

    Je vous remercie d’avance pour votre aide !

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    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 136
    Par défaut
    Qu'as-tu déjà fait ?
    En quoi cela ne donne-t-il pas le résultat attendu ?
    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
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut
    Il suffisait que je pose la question pour que je trouve la réponse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT nom_pers, prenom_pesr FROM personnes
    WHERE id_pers IN (SELECT pers_id FROM travaux, WHERE etat_trav =  'en cours');
    Cette requête me retourne ce que je veux.
    Mais est-ce la "bonne" manière de faire ?

    Merci !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    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 136
    Par défaut
    C'est une bonne manière de faire.

    Tu peux aussi utiliser EXISTS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  prs.nom_pers
        ,   prs.prenom_pers
    FROM    personnes   prs
    WHERE   EXISTS
            (   SELECT  NULL
                FROM    travaux trv
                WHERE   trv.etat_trav = 'en cours'
                    AND trv.pers_id   = prs.id_pers
            )
    ;
    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
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2013
    Messages : 8
    Par défaut
    Je vous remercie pour votre réponse.

    Cependant, je rencontre quand même un problème :

    Si une personne possède un travail "terminé" ET un travail "en cours", ma requête ne fonctionne plus. En effet, elle retourne comme résultat les 2 ligne de la personne, celle ou le travail est "terminé" et celle ou le travail est "en cours". Je voudrais donc uniquement quelle retourne la ligne "en cours" même si cette même personne possède une ligne "terminé".

    Comment dois-je adapter ma requête ?

    J'espère que ma demande est compréhensible.

    D'avance merci !

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    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 136
    Par défaut
    Quelle requête exécutes-tu exactement ?
    Peux-tu donner un jeu d'essai de quelques lignes qui permette de reproduire de problème ?
    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.

Discussions similaires

  1. [DI] Création de colonne dans une Sous - Requête
    Par jmarandet dans le forum Outils BI
    Réponses: 3
    Dernier message: 12/03/2013, 14h12
  2. [Vxi3] Création d'une sous-requête
    Par purplebamboo dans le forum Webi
    Réponses: 3
    Dernier message: 11/08/2010, 15h54
  3. Création d'une sous-requête All
    Par christelle_p dans le forum Débuter
    Réponses: 1
    Dernier message: 22/06/2009, 14h45
  4. Ramener plusieurs champs dans une sous requête...
    Par David.V dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 12/01/2005, 07h54
  5. Réponses: 3
    Dernier message: 18/05/2003, 00h16

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