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 :

[..] LEFT JOIN TOP 1 [..]


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
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut [..] LEFT JOIN TOP 1 [..]
    Bonjour,

    J'aimerai savoir s'il est possible (si oui, quelle est la synthaxe correcte) d'effectuer un TOP 1 après une jointure.

    Pour l'instant, j'ai la reqûete suivante (volontairement simplifié pour faciliter la compréhension de mon besoin) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM TABLE1 as a
    LEFT JOIN TABLE2 as B ON b.DATE BETWEEN a.DATE-365 and a.DATE-1
    J'aimerai maintenant que la requête s'arrête à la première jointure trouvée (par soucis de gain de temps)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT *
    FROM TABLE1 as a
    LEFT JOIN TOP 1 TABLE2 as B ON b.DATE BETWEEN a.DATE-365 and a.DATE-1

    Pourriez-vous m'aider ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Vraiment bizarre cette demande...

    Vous voulez vous arretez a la 1ere jointure effectuée, mais vous faites une jointure externe (et ce, sans aucun tri ou clause particuliere)... C'est a dire que vous laissez la possibilité a la requete de vous ramener des tuples de la table2 NULL n'ayant pas de correspondance avec Table1, dans ce cas, autant ne pas faire de jointure et prendre la premiere ligne de votre Table1 !!

    Ex :

    Table1
    id - Date
    1 20110820
    2 20110821
    3 20110822

    Table2
    id - Date
    4 20110821
    5 20110822
    6 20110823

    Votre requete pourra vous rammener
    1 - 20110820 - NULL - NULL
    2 - 20110821 - 4 - 20110821
    3 - 20110822 - 5 - 20110822

    Et vous voulez vous arreter a votre 1ere jointure, soit
    1 - 20110820 - NULL - NULL

    Ce qui me parait tres etrange !!

    Peut etre ai je mal compris

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut
    En reprenant votre exemple, voici dont j'ai besoin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT *
    FROM TABLE1 AS a
    LEFT JOIN TOP 1 TABLE2 AS B
    ON b.DATE BETWEEN a.DATE-365 AND a.DATE-1
    AND NAME = 'M'
    (n'oubliez pas que j'ai simplifié mon code..)

    Table1
    id - Date
    1 20110820

    Table2
    id - Date - name
    2 20110812 M
    3 20110813 M
    4 20110814 F
    5 20110815 M
    6 20110816 F
    7 20110817 M
    8 20110818 M
    9 20110819 F
    10 20110820 M
    ...

    Ma requête peut me donner
    1 - 20110820 - 20110812 - M
    1 - 20110820 - 20110813 - M
    1 - 20110820 - 20110815 - M
    1 - 20110820 - 20110817 - M
    1 - 20110820 - 20110818 - M

    Et je veux m'arrêter à une seule jointure. Par exemple
    1 - 20110820 - 20110817 - M

  4. #4
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    et si a la place de

    Table1
    id - Date
    1 20110820


    Vous aviez

    Table1
    id - Date
    1 19110820

    Que devrait vous retourner votre requete ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    190
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 190
    Par défaut
    Citation Envoyé par Yanika_bzh Voir le message
    et si a la place de

    Table1
    id - Date
    1 20110820


    Vous aviez

    Table1
    id - Date
    1 19110820

    Que devrait vous retourner votre requete ?
    Ma requête me donnerait
    1 19110820 - NULL- NULL

    ce que je souhaite !

    Dans la majorité des cas, j'aurai, pour chacune des dates antérieures, une jointure possible. Mais parceque vérifier TOUTES les dates antérieures prend énormement de temps, j'aimerai m'arreter rapidement à la première jointure vérifié (et sinon, dans le cas contraire, la seule et unique (NULL-NULL)).

    J'insiste donc bien sur ma requête initiale : TOP 1 après un LEFT JOIN

    Merci de m'aider..

  6. #6
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    N'etant pas convaincu de l'utilité de votre demande pour le résultat souhaité, et du fait que vous ne maitrisiez pas parfaitement votre regle fonctionnelle, je ne vais pas m'aventurer a vous donner une solution.

    Peut etre que quelqu'un d'autre vous aidra sur ce forum.

    Bonne chance et bon courage

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

Discussions similaires

  1. [AC-2007] TOP 1 dans LEFT JOIN
    Par windmastr26 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 05/07/2011, 08h42
  2. LEFT JOIN avec Oracle 8i ne va pas... doit utiliser (+)
    Par loikiloik dans le forum Langage SQL
    Réponses: 10
    Dernier message: 21/04/2004, 16h38
  3. Interbase et left join
    Par Zog dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/03/2004, 08h55
  4. Non coincident MySQL (Left Join)
    Par Remiguel dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/11/2003, 21h25
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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