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 :

[TSQL] 2 liaisons


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut [TSQL] 2 liaisons
    Salut,

    J'ai cette requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     Select tbParties.IDOperation as 'Operation', 
    		tbParties.IDPartie as 'IDPartie',
    		tbParties.NumPartie as 'NumPartie',
    		tbCompositions.IDCommande as 'Commande',
    		(Select Count(*) From tbBalles Where tbBalles.IDPartie=tbParties.IDPartie) as 'Quantite',
    		tbPrix_Cl.Prix as 'Prix'
     From tbParties, tbCompositions, tbCommandes, tbPrix_Cl
     Where (tbParties.IDCompo = tbCompositions.IDCompo And tbCompositions.IDCommande = tbCommandes.IDCommande) And
    	   (tbCommandes.IDCommande=tbCompositions.IDCommande And tbCommandes.IDClientIN=tbPrix_Cl.IDClient 
    		And tbPrix_Cl.IDOperation=tbParties.IDOperation)
    Cela fonctionne comme je le souhaite...
    Maintenant je souhaiterais : si (tbCommandes.IDCommande=tbCompositions.IDCommande And tbCommandes.IDClientIN=tbPrix_Cl.IDClient
    And tbPrix_Cl.IDOperation=tbParties.IDOperation)
    ne me renvoit rien... alors appliquer cette liaison ci à la place :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (tbPrix.IDOperation=tbParties.IDOperation)
    Comment est-ce que je peux m'y prendre ?

    Merci de votre aide...

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    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 902
    Points : 51 646
    Points
    51 646
    Billets dans le blog
    6
    Par défaut
    Faites une requête union en ajoutant une colonne tagant la provenance et si doublon du tag ne retenir que les lignes avec tag = min(tag)

    A +

  3. #3
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Merci de votre réponse...
    Vous ne pouvez pas me montrer un exemple parce que je nage là...
    Merci d'avance.

    Bonne journée.

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Est-ce que celà correspondrait à ton besoin
    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
    SELECT    tbParties.IDOperation AS 'Operation'
        ,    tbParties.IDPartie AS 'IDPartie'
        ,    tbParties.NumPartie AS 'NumPartie'
        ,    tbCompositions.IDCommande AS 'Commande'
        ,    (SELECT Count(*) FROM tbBalles WHERE tbBalles.IDPartie=tbParties.IDPartie) AS 'Quantite'
        ,    tbPrix_Cl.Prix AS 'Prix'
    FROM
            tbParties
        LEFT JOIN
            tbCompositions
            ON    tbParties.IDCompo = tbCompositions.IDCompo
        LEFT JOIN 
            tbCommandes
            ON    tbCompositions.IDCommande = tbCommandes.IDCommande
        INNER JOIN
            tbPrix_Cl
            ON    tbParties.IDOperation = tbPrix_Cl.IDOperation
    WHERE      
            tbPrix_Cl.IDClient = coalesce(tbCommandes.IDClientIN, tbPrix_Cl.IDClient)

  5. #5
    Membre actif Avatar de diaboloche
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    592
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 592
    Points : 274
    Points
    274
    Par défaut
    Merci de ta réponse.

    J'ai testé mais cela ne fonctionne pas...
    Dans le cas où la table tbPrix_Cl ne contient pas le prix voulu (IDOperation & IDClient) alors je veux le prix (qui existe lui...) de la table tbPrix (IDOperation)...
    J'ai testé dans le premier cas il me donne bien le bon prix, dans le deuxième aucun record n'est renvoyés...

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Je n'avais pas vu qu'une cinquième table entrait en jeu :
    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
    SELECT    tbParties.IDOperation AS 'Operation'
        ,    tbParties.IDPartie AS 'IDPartie'
        ,    tbParties.NumPartie AS 'NumPartie'
        ,    tbCompositions.IDCommande AS 'Commande'
        ,    (SELECT Count(*) FROM tbBalles WHERE tbBalles.IDPartie=tbParties.IDPartie) AS 'Quantite'
        ,    coalesce(tbPrix_Cl.Prix, tbPrix.Prix) AS 'Prix'
    FROM
            tbParties
        LEFT JOIN
            tbCompositions
            ON    tbParties.IDCompo = tbCompositions.IDCompo
        LEFT JOIN 
            tbCommandes
            ON    tbCompositions.IDCommande = tbCommandes.IDCommande
        LEFT JOIN
            tbPrix_Cl
            ON    tbPrix_Cl.IDClient = tbCommandes.IDClientIN
        LEFT JOIN
            tbPrix
            ON    tbPrix.IDOperation = tbParties.IDOperation
    WHERE    tbParties.IDOperation = coalesce(tbPrix_Cl.IDOperation, tbParties.IDOperation)
    ;
    Les jointures sur tbCompositions, tbCommandes et tbPrix sont peut-être des jointures internes, je ne connais pas ton modèle...

Discussions similaires

  1. [CR] liaison crystal report et vb6
    Par breizhange dans le forum SDK
    Réponses: 7
    Dernier message: 10/08/2015, 13h29
  2. Liaison de police
    Par arno_ dans le forum Flash
    Réponses: 11
    Dernier message: 06/07/2005, 22h58
  3. Liaison d'une dll Visual C++ dans un programme c++Builder
    Par Cyrilh7 dans le forum C++Builder
    Réponses: 7
    Dernier message: 08/11/2003, 13h49
  4. partage d'une liaison ADSL
    Par hassen dans le forum Développement
    Réponses: 6
    Dernier message: 20/10/2003, 20h10
  5. [TP]Liaison série avec TP7 dans fenêtre DOS W2000
    Par Alain81 dans le forum Turbo Pascal
    Réponses: 8
    Dernier message: 14/06/2003, 00h43

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