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

Développement SQL Server Discussion :

Pb Requete multitable


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 111
    Par défaut Pb Requete multitable
    Bonjour,

    J'ai un petit souci pour une requête qui pointe sur des champs différent d'une même table.

    J'ai ma table
    Suivi avec le champs IDEditeur et IDLogiciel
    Et la table :
    Detail avec le champs IDDetail et IntituleDetail.

    J'aimerais en une seule requête afficher l'intitulé de l'éditeur et l'intitule du logiciel mais je n'arrive pas avec les jointures a afficher le bon truc.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT Suivi.IDEditeur, Detail.IntituleDetail, Suivi.IDLogiciel, Detail.IntituleDetail
    FROM Suivi, Detail
    WHERE ....
    Je sais pas trop comment dire que le 1er Detail.IntituleDetail doit pointer sur IDEditeur et le deuxième Detail.IntituleDetail doit pointer sur IDLogiciel.

    Merci de votre aide.

  2. #2
    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 : 44
    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
    Par défaut
    Bonjour,

    Je pense que votre schéma de données est incomplet.
    Je suppose que vous souhaitez retrouver un détail de logiciel pour chaque logiciel.
    Or, vous n'avez pas de colonne IDLogiciel dans la table Detail, ce qui vous empêche de réaliser la jointure

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT S.IDEditeur, D.IntituleDetail, S.IDLogiciel, Detail.IntituleDetail
    FROM dbo.Suivi AS S
    JOIN dbo.Detail AS D
    	ON S.IDLogiciel = D.IDLogiciel 
    WHERE ....
    N'oubliez pas de qualifier les tables de votre jointure par le nom du schéma auquel elles appartiennent (par défaut c'est dbo) et de spécifier vos jointures à l'aide du mot clé JOIN, ce qui vous permet de séparer les jointures (JOIN) des filtres (WHERE)

    @++

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    ou encore

    select * from table1 a,table2 b where a.id = b.id

    Les 2 solutions font la même chose mais la première est plus simple a lire par après.

    A+

  4. #4
    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 : 44
    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
    Par défaut
    Non pour plusieurs raisons :

    - les prédicats de jointure ne sont pas séparés des filtres, ce qui rend la requête moins lisible,
    - cela peut poser problème dans certains cas particuliers à l'optimiseur de requêtes
    - les jointures dans une clause WHERE ne sont plus à la norme depuis 1992

    @++

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    777
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 777
    Par défaut
    Je n'ai pas dit que c'etait la meilleur solution, je propose juste une alternative.
    De plus j'avais deja mis dans mon precedent post que la premiere solution proposée etait plus simple a lire.

    Meme si ce n'est plus la norme ce qui est vrai c'est interpreté excatement pareil par le serveur. il n'y aura pas de différence de performance.

    Si j'ajoute cela c'est que certain provider (driver) ne reconnaissent pas focement ces mot clefs. (oui ca existe encore)

    voilà mais personnellement je fais toujours mes jointure avec join

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    111
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 111
    Par défaut
    Ah, niquel ca marche.


    Merci bcp j'avais pas penser a nommer les tables.

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

Discussions similaires

  1. une requete multitable
    Par dualchi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 26/09/2007, 15h45
  2. Réponses: 3
    Dernier message: 12/07/2007, 18h10
  3. Réponses: 2
    Dernier message: 18/06/2007, 12h16
  4. requete multitable sur mysql
    Par tianet dans le forum Requêtes
    Réponses: 2
    Dernier message: 08/05/2007, 22h54
  5. Problème requete multitables
    Par dl_jarod dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/10/2005, 10h33

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