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 :

Inner join - plusieurs critères


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut Inner join - plusieurs critères
    Bonjour à toutes et tous,

    Voilà ... mon premier post ...
    Pour vous présenter un peu le décor, je suis complètement novice sur SQl (en attendant une formation d'ici quelques semaines). En attendant, je me base sur des modèles de requêtes récupérées un peu partout.

    Ce qui m'amène ? C'est ... ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    select *
    from xxx PPPP
     
     inner join zzz DDDD
            on ddd.------ = ppp.------
            and ddd.n------ = ppp.------
     
    inner join xxx  RRRR
            on rrr.------ = ppp.------
            and rrr.------ = ppp.------
     
    where ppp.------ =82069289
    and rrr.------ = 243859

    avec une condition sur ppp et sur rrr, j'arrive à avoir des résultats
    par contre sur plusieurs ppp et plusieurs rrr, qui sont liés, dans le sens où je dois aller cherche un couple ppp/rrr ... je suis complètement à sec.

    J'ai remplacé = par IN, le AND par OR ...

    C'est feuille blanche ...

    Si quelqu'un a une idée pour me sortir de là. En espérant que mon exemple est suffisamment clair ...

    Merci pour votre aide

    M

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 588
    Par défaut
    Salut,

    C'est ambigu ce que tu demandes
    par contre sur plusieurs ppp et plusieurs rrr, qui sont liés, dans le sens où je dois aller cherche un couple ppp/rrr ...
    ? Pour ta requêtes tu dois partir d'une besoin qu'est-ce que tu veux récupérer?
    Qu'est ce que tu veux en sortie?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    on rrr.------ = ppp.------
    and rrr.------ = ppp.------
    Pourquoi un and? Post la structure de tes tables s"il te plaît.

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    select *
      from xxx as ppp
      join zzz as ddd  on ddd.xxxxx = ppp.xxxxx
                      and ddd.yyyyy = ppp.yyyyy
      join xxx as rrr  on rrr.xxxxx = ppp.xxxxx
                      and rrr.yyyyy = ppp.yyyyy
     where (ppp.zzzzz = 82069289 and rrr.aaaaa = 243859)
        or (ppp.zzzzz = 82069290 and rrr.aaaaa = 243860)
        or (ppp.zzzzz = 82069291 and rrr.aaaaa = 243861)
       ...
    Les parenthèses dans le WHERE sont ici inutiles car le AND est prioritaire sur le OR (vous le verrez pendant la formation), mais ça facilite la relecture en évitant de se poser la question, donc je laisse ainsi.

    Edit : ça fonctionne peut-être comme ça aussi ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    select *
      from xxx as ppp
      join zzz as ddd  on ddd.xxxxx = ppp.xxxxx
                      and ddd.yyyyy = ppp.yyyyy
      join xxx as rrr  on rrr.xxxxx = ppp.xxxxx
                      and rrr.yyyyy = ppp.yyyyy
      join ( values (82069289, 243859)
                  , (82069290, 243860)
                  , (82069291, 243861)
           ) as bbb (zzzzz, aaaaa)
                       on bbb.zzzzz = ppp.zzzzz
                      and bbb.aaaaa = rrr.aaaaa
    Mais comme ça je ne crois pas à moins que ça ait changé sur les versions plus récentes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select *
      from xxx as ppp
      join zzz as ddd  on ddd.xxxxx = ppp.xxxxx
                      and ddd.yyyyy = ppp.yyyyy
      join xxx as rrr  on rrr.xxxxx = ppp.xxxxx
                      and rrr.yyyyy = ppp.yyyyy
     where (ppp.zzzzz, rrr.aaaaa) in ( (82069289, 243859)
                                     , (82069290, 243860)
                                     , (82069291, 243861) )

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Les parenthèses dans le WHERE sont ici inutiles car le AND est prioritaire sur le OR (vous le verrez pendant la formation), mais ça facilite la relecture en évitant de se poser la question, donc je laisse ainsi.
    Autant je réprouve les parenthèses pléthoriques, autant j'approuve ce genre de précautions : compréhension facile = maintenance facile et fiabilité préservée

  5. #5
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut Exemple détaillé
    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
    select * from Table_marchandises_reçues   Recep ------- Il s'agit de la table dans laquelle se trouvent des articles reçus, avec des prix et des quantités
    Inner join              table_prix   Valo ---------  c'est le résultat de : quantité reçue x prix
    on                      Reception.numero_article = Valo.numero_article
     
    Inner join              table_stock    Stock ---------- c'est l'état de stock
    on                      Stock.numero_article = Valo.numero_article
     
    Inner Join              table_prix_moyen   Prix_moyen   --- il s'agit des prix moyens calculés
    on                      Prix_Moyen.numero_article = Valo.numero_article
     
     
    Inner join              table_prix_fixe   Dernier_prix ---- c'est le prix qui auquel le fournisseur vend
    on                     Dernier_prix.numero_article = valo.numero_article
     
    where Reception.numero_article IN (12345678)  -- listes des articles
     and Reception.numero_site = 12 -- liste des sites
    ;

    ===> je souhaite avoir pour plusieurs articles, et plusieurs sites les données de prix, prix moyen, état de stock etc ...
    ===> ces lignes de codes fonctionnent quand le cherche des données sur un code et un site
    mais dès que je veux requeter deux codes différents, sur deux sites différents, SQL rame dans le vide.

    J'ai essayé les différentes solutions proposées dans vos posts ... plouf :-(
    Par ailleurs, dans ma requete de base, ( 1 code, 1 site), je me retrouve avec autant de lignes que de tables jointes. :-(

    Merci pour votre aide

    M

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Êtes-vous sûr d'utiliser Microsoft SQL-Server ?
    C'est une erreur courante de confondre MySQL et MS SQL.

    Avec quel outil exécutez-vous vos requêtes ?

  7. #7
    Candidat au Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Août 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2013
    Messages : 3
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Êtes-vous sûr d'utiliser Microsoft SQL-Server ?
    C'est une erreur courante de confondre MySQL et MS SQL.

    Avec quel outil exécutez-vous vos requêtes ?

    Avec ORACLE SQL SERVER

Discussions similaires

  1. requete sur plusieurs tables sans inner join?
    Par polo86 dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/04/2009, 15h10
  2. Plusieurs INNER JOIN dans une requete
    Par droudrou2000 dans le forum Requêtes et SQL.
    Réponses: 16
    Dernier message: 26/02/2009, 09h58
  3. soucis de jointure sur plusieurs critères "left join ON . AND ON ."
    Par Moutonstar dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 24/11/2008, 17h22
  4. Access 2000 - plusieurs inner join
    Par kekesilo dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 02/04/2008, 18h36
  5. une requête avec plusieurs INNER JOIN, cmt faire ?
    Par elhosni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/01/2006, 17h55

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