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 :

Problème sous requête


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut Problème sous requête
    Bonjour ,

    je suis en train de coder une application en php et je dois utiliser des requêtes SQL . Jusque là aucun soucis !

    J'ai une base de données sur mysql qui gère des épreuves , on a donc ceci :

    - Une épreuve peut avoir plusieurs salles , et une salle peut être liée à plusieurs épreuves.
    - Une épreuve peut avoir plusieurs dates, et une date peut correspondre à plusieurs épreuves.

    Je souhaite désormais afficher la liste des salles de cours qui ne sont pas prises entre deux dates .
    J'ai donc pensé à une sous requête mais je n'arrive pas à avoir le raisonnement correct.

    J'ai commencé à coder cette requête mais elle ne me donne aucun résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT s.idSalle , s.nomSalle 
    FROM salles s 
    WHERE NOT EXISTS (
        SELECT * 
        FROM salles s, necessaire_a na , epreuve e , date d , date_liee_a da 
        WHERE e.idEp = na.idEp 
          AND na.idSalle = s.idSalle 
          AND e.idEp = da.idEp 
          AND da.idDate = d.idDate 
          AND d.date BETWEEN '2014-02-10' AND '2014-02-11' 
    )
    Je pense que je fais quelque chose de totalement contradictoire dans les requêtes d'où le problème.

    Si quelqu'un peut m'aiguiller, je suis perdu...

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 197
    Points : 12 772
    Points
    12 772
    Par défaut
    Bonjour,
    Pour que la sous-requête soit corrélée à la requête principale, il faut enlever la table salle de la sous-requête.
    Sinon dès qu'une salle sera prise pour une date donnée, aucune salle ne sera disponible pour cette date (vu que la sous-requête renverra au moins une ligne).

    Tatayo.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Le soucis c'est que si j'enlève la table salles de la sous requête comment vais-je savoir dans cette dernière si des salles sont prises sur une date donnée ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Vous retirez salles du FROM de la sous-requête mais pas du WHERE, comme ça vous avez une sous-requête corrélée.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par sapic63 Voir le message
    Bonjour ,

    je suis en train de coder une application en php et je dois utiliser des requêtes SQL . Jusque là aucun soucis !

    J'ai une base de données sur mysql qui gère des épreuves , on a donc ceci :

    - Une épreuve peut avoir plusieurs salles , et une salle peut être liée à plusieurs épreuves.
    - Une épreuve peut avoir plusieurs dates, et une date peut correspondre à plusieurs épreuves.

    Je souhaite désormais afficher la liste des salles de cours qui ne sont pas prises entre deux dates .
    J'ai donc pensé à une sous requête mais je n'arrive pas à avoir le raisonnement correct.

    J'ai commencé à coder cette requête mais elle ne me donne aucun résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT s.idSalle , s.nomSalle 
    FROM salles s 
    WHERE NOT EXISTS (
        SELECT * 
        FROM salles s, necessaire_a na , epreuve e , date d , date_liee_a da 
        WHERE e.idEp = na.idEp 
          AND na.idSalle = s.idSalle 
          AND e.idEp = da.idEp 
          AND da.idDate = d.idDate 
          AND d.date BETWEEN '2014-02-10' AND '2014-02-11' 
    )
    Je pense que je fais quelque chose de totalement contradictoire dans les requêtes d'où le problème.

    Si quelqu'un peut m'aiguiller, je suis perdu...
    Cette requête est une horreur ! Les jointures entre les tables se font dans l'opérateur JOIN depuis 1982. Vous avez 21 ans de retard !!!! De plus c'est stupide de faire un produit cartésien suivi d'une restriction en lieu et place d'une jointure...

    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/ * * * * *

  6. #6
    Modérateur
    Avatar de Chtulus
    Homme Profil pro
    Ingénieur
    Inscrit en
    Avril 2008
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2008
    Messages : 3 094
    Points : 8 678
    Points
    8 678
    Par défaut
    Bonjour Frédéric,

    Citation Envoyé par SQLpro Voir le message
    Les jointures entre les tables se font dans l'opérateur JOIN depuis 1982.
    Tu voulais dire 1992
    « Je ne cherche pas à connaître les réponses, je cherche à comprendre les questions. »
    - Confucius -

    Les meilleurs cours, tutoriels et Docs sur les SGBD et le SQL
    Tous les cours Office
    Solutions d'Entreprise



  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 4
    Points : 4
    Points
    4
    Par défaut
    Désolé si cette requête est une "horreur" mais je fais avec les connaissances que l'on me donne en cours et nous débutons seulement le SQL.
    Et effectivement je viens de voir qu'il existe les JOIN et je vais me mettre à y apprendre .
    Ça aurait été bien d'y voir dès le début en cours mais bon ce n'est pas moi qui écrit les fiches de mon prof.. En tant qu'enseignant vous devriez savoir qu'on ne peut pas tout apprendre d'un coup

    Et donnez des conseils plutôt que de pointer du doigt .. Je suis prêt à apprendre ( je suis là pour ça ^^ )

    Et merci skuatamad pour ton aide , j'ai réussi ce que je voulais faire

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

Discussions similaires

  1. Problème sous-requête complexe
    Par Soucmic dans le forum Développement
    Réponses: 11
    Dernier message: 02/05/2013, 08h51
  2. Problème sous requête
    Par darkloy dans le forum Requêtes
    Réponses: 5
    Dernier message: 29/01/2012, 21h35
  3. Problème sous-requête MAX et COUNT
    Par grafistolage dans le forum Requêtes
    Réponses: 6
    Dernier message: 06/07/2010, 09h08
  4. Problème Sous-Requête
    Par STEF_1 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/01/2006, 13h12
  5. problème sous-requête SQL et order by
    Par aguest dans le forum Requêtes
    Réponses: 10
    Dernier message: 26/12/2005, 23h57

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