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 :

Demande d'aide pour une requete SQL


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Demande d'aide pour une requete SQL
    Bonjour,
    J'ai un problème que je n'arrive pas a résoudre.

    Voici une table d'une base de données, qui indique les modeles de voiture disponibles par ville et par marque.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Garage	Ville	Modele
     
    Renault	Paris	Clio
    Renault	Paris	Megane
    Renault	Lyon	Clio
    Renault	Lyon	Megane
    Peugeot	Paris	207
    Peugeot	Paris	308
    Peugeot	Lyon	207
    Peugeot	Lyon	308
    Je souhaiterais mettre en évidence le fait que le choix de la ville n'a aucune incidence sur les modèles disponibles pour chacune des marques.
    (et mettre en évidence le contraire si ce n'est pas le cas).

    Comment proceder ?

    Merci d'avance,
    Matthieu

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Bonjour,

    Qu'appelez vous mettre en évidence?
    Compter le nombre de modèles différents par ville pour les comparer?
    Obtenir la liste des modèles en commun entre deux villes?

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Snipah Voir le message
    Bonjour,

    Qu'appelez vous mettre en évidence?
    Compter le nombre de modèles différents par ville pour les comparer?
    Obtenir la liste des modèles en commun entre deux villes?
    Ce que je cherche à montrer, c'est que la colonne "Ville" dans mon exemple, ne sert a rien, car que l'on soit a Paris ou a Lyon, pour une marque donnée, on aura le choix entre les mêmes modèles.

    Ceci serait faux si dans la dernière ligne, je remplaçais 308 par 406 par exemple, auquel cas, le fait d'être a Lyon ou a Paris, pour la marque Peugeot, ne donnerait pas les mêmes modèles.

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Ca n'était pas vraiment ma question.
    Admettons qu'en sortant l'ensemble des villes capables de fournir tous les modèles, on aura notre "mise en évidence".
    Vous pouvez essayer :
    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
    21
    22
    23
     
    with t
    as
    (	   
    select 'Renault' as garage, 'Paris' as ville, 'Clio' as modele union all
    select 'Renault' as garage, 'Paris' as ville, 'Megane' as modele union all
    select 'Renault' as garage, 'Lyon' as ville, 'Clio' as modele union all
    select 'Renault' as garage, 'Lyon' as ville, 'Megane' as modele union all
    select 'Peugeot' as garage, 'Paris' as ville, '207' as modele union all
    select 'Peugeot' as garage, 'Paris' as ville, '308' as modele union all
    select 'Peugeot' as garage, 'Lyon' as ville, '207' as modele union all
    select 'Peugeot' as garage, 'Lyon' as ville, '308' as modele 
    )
    SELECT DISTINCT ville
    FROM t ville1
    WHERE NOT EXISTS
       (SELECT *
        FROM t mod
        WHERE NOT EXISTS
           (SELECT *
            FROM t ville2
            WHERE ville1.ville = ville2.ville
            AND (ville2.modele = mod.modele)))
    On peut d'ailleurs le soustraire à l'ensemble des villes pour obtenir celles qui ne proposent pas tous les modèles, si on obtient un ensemble vide, alors toutes les villes sont capables de fournir tous les modèles :
    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
    21
    22
    23
    24
    25
     
    with t
    as
    (	   
    select 'Renault' as garage, 'Paris' as ville, 'Clio' as modele union all
    select 'Renault' as garage, 'Paris' as ville, 'Megane' as modele union all
    select 'Renault' as garage, 'Lyon' as ville, 'Clio' as modele union all
    select 'Renault' as garage, 'Lyon' as ville, 'Megane' as modele union all
    select 'Peugeot' as garage, 'Paris' as ville, '207' as modele union all
    select 'Peugeot' as garage, 'Paris' as ville, '308' as modele union all
    select 'Peugeot' as garage, 'Lyon' as ville, '207' as modele union all
    select 'Peugeot' as garage, 'Lyon' as ville, '308' as modele
    )
    SELECT ville FROM t
    except
    SELECT ville
    FROM t ville1
    WHERE NOT EXISTS
       (SELECT *
        FROM t mod
        WHERE NOT EXISTS
           (SELECT *
            FROM t ville2
            WHERE ville1.ville = ville2.ville
            AND (ville2.modele = mod.modele)))

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    235
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 235
    Points : 183
    Points
    183
    Par défaut
    Sinon tu peux faire un truc du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT Modele FROM table WHERE Ville='Paris' AND Modele NOT IN (SELECT Modele FROM table WHERE Ville='Lyon')
    Si ta pas de résultat, c'est que ca soit à Paris ou à Lyon, tu as les mêmes modeles. Si tu as des résultats, ils représentent les modeles qu'il y a à Paris et pas à Lyon.
    Par contre pour l'inverse ca fonctionne pas... Ou il faut modifier la requête.

    PS : Je crois que ça marche, ça fait longtemps que je n'ai pas fait de SQL...

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2009
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Octobre 2009
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Bonjour,
    Merci Snipah,
    En effet je ne répondais pas a votre question car vous me proposiez 2 stratégies or je n'arrivais pas en trouver de stratégie justement, je me suis donc contenté d'expliquer différemment mon besoin final.

    Je vais tenter d'appliquer votre solution à mon problème réel, ce qui risque d'être assez fastidieux car ma table contient 25 colonnes, 2 millions d'enregistrements, 2 colonnes représentent la 'ville', 2 colonnes représentent les 'marques', et tout le reste représente les modèles ...

    Merci encore pour votre aide!

Discussions similaires

  1. Aide pour une requete SQL..
    Par denissay dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 13/11/2007, 21h40
  2. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 15
    Dernier message: 02/05/2006, 17h03
  3. Besoin d'aide pour une requete SQL
    Par fabris dans le forum Requêtes
    Réponses: 6
    Dernier message: 10/04/2006, 20h27
  4. Aide pour une requete SQL
    Par hpghost dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 08/01/2005, 15h01
  5. Aide pour une requete SQL
    Par hpghost dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 08/01/2005, 10h15

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