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

MS SQL Server Discussion :

Problème requête sqlserver


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Femme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 36
    Points : 20
    Points
    20
    Par défaut Problème requête sqlserver
    Bonsoir ,

    J'ai une requête dont je veux utiliser deux tables une table FicheEngin et une table FichePneu

    Je veux afficher, selon la référence du pneu , la date (à partir de FicheEngin) et l'opération réalisée ( à partir de FichePneu) sur ce pneu en cette date.
    Sachant que la référence du pneu dans la fiche engin est trouvée dans l'une des positions des pneus dans l'engin c-à-d , elle peut être soit en AG , AD , ARDE , ARDI ....

    J'ai abordé cette syntaxe qui ne fonctionne pas malheureusement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Select FE.Date , FP.ReferencePneu , FP.Operation from FicheEngin FE INNER JOIN FichePneu FP where FP.ReferencePneu = FE.AG OR FE.AD OR FE.ARDE OR FE.ARDI OR FE.DEUXID OR FE.DEUXED OR FE.DEUXIG OR FE.DEUXEG OR FE.ARGE OR FE.ARGE ;

    ??? Solution ! Je travaille sous l'environnement C# ! Merci d'avance

  2. #2
    Invité
    Invité(e)
    Par défaut
    Révisez votre SQL : http://sqlpro.developpez.com/cours/sqlaz/jointures/



    Un indice en bas de votre écran : join ... on ...

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    En effet il aurait fallu écrire la jointure comme suit :

    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		FE.Date 
    		, FP.ReferencePneu 
    		, FP.Operation 
    FROM		dbo.FicheEngin AS FE
    INNER JOIN	dbo.FichePneu AS FP
    			ON FP.ReferencePneu = FE.AG
    			OR FP.ReferencePneu = FE.AD
    			OR FP.ReferencePneu = FE.ARDE
    			OR FP.ReferencePneu = FE.ARDI
    			OR FP.ReferencePneu = FE.DEUXID
    			OR FP.ReferencePneu = FE.DEUXED
    			OR FP.ReferencePneu = FE.DEUXIG
    			OR FP.ReferencePneu = FE.DEUXEG
    			OR FP.ReferencePneu = FE.ARGE
    Cela dit avec un prédicat de jointure aussi long et basé uniquement sur des OR, je doute qu'avec un certain nombre de lignes dans les deux tables, cela soit performant

    En fait, c'est votre modèle de données qui est faux : pour le moment vous avez une table FicheEngin avec autant de colonnes que de possibilités de pneu par engin.
    Que se passera-t-il le jour ou un nouvel engin, sera acheté par votre entreprise, et qu'on doive effectuer une opération sur un pneu dont la position n'existe pas jusqu'ici ?
    Vous allez ajouter une colonne, et modifier tout le code de votre application pour prendre en compte cette nouvelle colonne.

    En revanche, si vous avez une table qui stocke toutes les positions de pneu possibles, et dans votre table fiche enfin, toutes les colonnes de position de pneu une seule qui référence la clé primaire de la table des positions de pneu, et une colonne pour la référence du pneu, votre requête devient alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT		FE.Date 
    		, FP.ReferencePneu
    		, FE.PositionPneu
    		, FP.Operation 
    FROM		dbo.FicheEngin AS FE
    INNER JOIN	dbo.FichePneu AS FP
    			ON FP.ReferencePneu = FE.ReferencePneu
    Comme vous n'avez alors qu'à créer un index sur la colonne seule ReferencePneu, votre requête sera très rapide.
    Comme votre table a donc moins de colonnes, les pages de cette table sont plus riches en information.

    Si vous voulez ajouter une nouvelle position, aucun problème : il suffit de l'ajouter dans la table de position des pneus ... et c'est tout !

    @++

Discussions similaires

  1. [WD16] Problème requête SQLServer
    Par fweds dans le forum WinDev
    Réponses: 9
    Dernier message: 22/08/2012, 10h02
  2. erreur3073 Problème requête
    Par amel123456789 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 01/04/2004, 10h15
  3. Problème requête qui renvoie plusieurs
    Par dai.kaioh dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/04/2004, 10h07
  4. Problème requête avec UNION et ORDER BY
    Par Yann21 dans le forum Langage SQL
    Réponses: 12
    Dernier message: 12/12/2003, 11h02
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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