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 :

Sous requête, comparaison de deux select


Sujet :

Langage SQL

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Sous requête, comparaison de deux select
    Bonjour,
    J'aimerai savoir si il est possible de comparer 2 select dans la clause where de la requête principal du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SELECT f1.titre
    FROM Film f1
    WHERE 
     
    (SELECT Count(DISTINCT s.numsalle)
    FROM Film f
    JOIN Programmation p ON f.numfilm = p.numfilm
    JOIN Salle s ON (s.numcinema = p.numcinema AND s.numsalle = p.numsalle)
    WHERE f.numfilm = f1.numfilm
    ORDER BY s.numsalle)
    =
    (SELECT count(DISTINCT s.numsalle)
     FROM salle s)
    Je suis sous oracle et il me met comme quoi il y'a une "missing expression" sur la ligne "ORDER BY s.numsalle"
    Les deux select renvoie une seule valeur, on doit pouvoir lui faire un test d'égalité non ?

    Merci.

  2. #2
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    Exercice de cours de SQL ? selectionner tous les films qui ont été diffusés dans toutes les salles, c'est ca?

    Dans ce cas, je pencherai pour la requete suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT f1.titre--, Count(DISTINCT s.numsalle)
    FROM Film f1
    JOIN Programmation p ON f1.numfilm = p.numfilm
    JOIN Salle s ON (s.numcinema = p.numcinema AND s.numsalle = p.numsalle)
    group by f1.titre
    having Count(DISTINCT s.numsalle) = (SELECT count(DISTINCT numsalle) FROM salle)

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    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 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Vous mettez un ORDER BY dans une sous requête ce qui est parfaitement idiot, car le tri est une opération cosmétique (et non pas une opération relationnelle) et ne concerne que le résultat final de la requête.

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

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    J'ai l'impression, d'après la requête, que les salles sont identifiées relativement au cinéma dans lequel elles se trouvent. Ainsi, le cinéma numsalle = 1 aura par exemple les salles numsalle = 1, 2, 3 et le cinéma numsalle = 2 aura les salles numsalles = 1, 2, 3, 4, 5. Ce qui fait que le COUNT(DISTINCT numsalle) ne renverra pas le bon compte si le film 1 est diffusé dans les salles 1 des cinémas 1 et 2.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Novembre 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Bonjour,

    Exercice de cours de SQL ? selectionner tous les films qui ont été diffusés dans toutes les salles, c'est ca?
    Oui l'énoncé c'est bien ça, au final c'est une division.
    Merci pour ton code, il est vrai que je pense pas souvent à la clause having.

    Vous mettez un ORDER BY dans une sous requête ce qui est parfaitement idiot
    Sans le order by la requête s’exécute en effet.

    J'ai l'impression, d'après la requête, que les salles sont identifiées relativement au cinéma dans lequel elles se trouvent.
    Après votre réponse j'ai relu l'énoncé et j'ai remarqué que ma requête étais mal faite. Du coup oui c'est bien dans toutes les salles de tous les cinémas (et non pas uniquement l'union des salles sans prendre en compte les cinéma).

    Merci pour vos réponses, la requête marche bien maintenant

Discussions similaires

  1. Comparaison de deux selects
    Par tib44 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/06/2015, 01h18
  2. Appeler le champ d'une sous-requête where dans un select
    Par purplebamboo dans le forum PL/SQL
    Réponses: 2
    Dernier message: 24/06/2013, 15h07
  3. [SQL Server 2K5] Requête INSERT avec deux SELECT
    Par gassisprog dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/08/2010, 14h55
  4. utiliser deux sous requêtes dans un select
    Par V i n c e n t dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/08/2010, 16h30
  5. Sous-requête dans la clause Select
    Par Danger dans le forum WinDev
    Réponses: 2
    Dernier message: 24/05/2005, 17h33

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