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 :

eviter le produit cartisien


Sujet :

Développement SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut eviter le produit cartisien
    Bonsoir,

    j'ai 4 table CMP,CO,PO,DT avec

    par exemple
    CMP : idcmp , name
    CO : idc ,idcmp
    PO : idp ,idc
    DT: idt,idp

    je voudrai avoir name,idc,idp,idt sans utiliser inner join

    quelqu'un a une idée

    Merci

  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,

    Vous confondez :
    - le produit cartésien, qui associe tous les tuples d'une table aux tuples d'une autre,
    - l'équi-jointure, introduite par INNER JOIN en T-SQL, et qui associe les tuples d'une table à une autre suivant un prédicat de jointure, c'est à dire suivant des valeurs de clé stockées dans l'une et l'autre des tables.

    je voudrai avoir name,idc,idp,idt sans utilisé inner join
    Quel en est l'intérêt ?

    @++

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Par défaut
    le probleme ce que je veux faire une seul requette regroupons plusieurs tables
    avec/sans relation par exemple:

    dans where

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    cmp-co-po-dt (avec relation)
     
    (cmp.id = co.id and co.id = po.id ....)
     
    or
    (cmp.id = pq.id .........)
    cmp-pq-po-cl-cr(avec relation)

  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
    Vos tables me semblent être liées par des relations.
    Je peux me tromper, mais ne pas se servir de ces relations est une erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CMP.name,
    		CO.idc,
    		PO.idp,
    		DT.idt
    FROM dbo.CMP
    LEFT JOIN dbo.CO
    	ON CMP.idcmp = CO.idcmp
    LEFT JOIN dbo.PO
    	ON CO.idc = PO.idc
    LEFT JOIN dbo.DT
    	ON DT.idp = PO.idp
    Jetez un oeil aux jointures ici et ici

    @++

  5. #5
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    Citation Envoyé par elsuket Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT CMP.name,
    		CO.idc,
    		PO.idp,
    		DT.idt
    FROM dbo.CMP
    LEFT JOIN dbo.CO
    	ON CMP.idcmp = CO.idcmp
    LEFT JOIN dbo.PO
    	ON CO.idc = PO.idc
    LEFT JOIN dbo.DT
    	ON DT.idp = PO.idp
    Avec FULL JOIN à la place de LEFT JOIN, ça devrait aller.

Discussions similaires

  1. Eviter les produits cartésiens
    Par nono27200 dans le forum SQL
    Réponses: 12
    Dernier message: 18/03/2009, 17h15
  2. Pb affichage avec un PaintBox (pour eviter scintillement)
    Par juan64 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/04/2004, 09h21
  3. [info]Licence des produits Java
    Par XavierZERO dans le forum Général Java
    Réponses: 12
    Dernier message: 16/01/2004, 16h27
  4. [Dev-Pascal] Ne produit pas d'exe
    Par portix dans le forum Autres IDE
    Réponses: 8
    Dernier message: 02/07/2003, 15h14
  5. Eviter deux nombres identiques dans un tirage aléatoire
    Par moon tiger dans le forum Pascal
    Réponses: 5
    Dernier message: 25/11/2002, 09h57

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