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

MS SQL Server Discussion :

[SQL S.2000] Jointure et top


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut [SQL S.2000] Jointure et top
    Bonjour à tous, un petit soucis de forme:

    Je fais une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * 
    FROM a
    LEFT JOIN (SELECT * FROM B) as B ON 1=1
    WHERE XXXX
    Le problème est que ma table B me renvoi 4 lignes, du coup ma requête globale renvoi elle aussi 4 lignes.

    Je veux donc limiter la table B à une ligne. Je fait donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * 
    FROM a
    LEFT JOIN (SELECT top 1 * FROM B ORDER BY ID DESC) as B ON 1=1
    WHERE XXXX
    Ma requête globale me renvoi bien une seule ligne, mais tous les champs issus de B sont à null….

    De plus si je mets top 2, je n’ai tjs qu’une seule ligne à null.

    Si qq’un à une idée sur comment faire ca, je suis preneur.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 75
    Points
    75
    Par défaut SQL avec jointure
    pour n'avoir qu'un enregistrement avec ton LEFT JOIN, il faudrait une clé unique entre tes 2 fichiers.

    Donne un exemple précis d'enregistrements dans les 2 tables, histoire de voir ton problème de plus près.

    Fred

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut
    J'ai bien sur simplifier.

    Vous pouvez remplacer ON 1=1 par A.ID=B.ID

    Ca ne change rien au problème malheureusement.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    et pourquoi tu ne fais pas le top sur la table A au lieu de B?

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut
    Et bien pour être plus concret. La table A renvoi 10 enregistrements.

    Seulement pour chaque enregistrement, la table B m'en renvois 2.

    au final je me retrouve donc avec 20 enregistrement au lieu de 10.

    Si je met top1 sur la table A elle ne renverra que 1 seul enregistrement et pas les 10 que je veux.

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    bah fait une simple jointure alors? en fait il faut que tu refasses ta requete et voir ce que tu veux exactement.

  7. #7
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Bonjour,

    En ne choisissant que les colonnes qui seront doublonnées dans le SELECT

  8. #8
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut
    Le problème c'est que tu ne peux faire un DISTINCT qu'avec une colonne. Si tu as besoin de retourner plusieurs colonnes de ta tables....

    En gros le distinct sa sert a rien.

  9. #9
    Expert confirmé
    Avatar de rudib
    Homme Profil pro
    Fakir SQL Server & NoSQL
    Inscrit en
    Mai 2006
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Fakir SQL Server & NoSQL

    Informations forums :
    Inscription : Mai 2006
    Messages : 2 573
    Points : 4 043
    Points
    4 043
    Par défaut
    Citation Envoyé par Wells
    Le problème c'est que tu ne peux faire un DISTINCT qu'avec une colonne.
    Totalement faux ...

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    USE master
    GO
     
    SELECT DISTINCT *
    FROM dbo.sysobjects

  10. #10
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut
    Si tu fait DISTINCT *, il te sélectionne les lignes qui sont parfaitement identiques, cad que tt les champs sont les mêmes.

    Hors moi je veux un distinct sur un seul champ tout en ramenant la ligne entière.

    D'ou mon exclamation que le distinct ne sert pas à grand chose.

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    et tu ne peux pas faire ca via une procédure stockée?
    sinon essaye un group by et un having.

  12. #12
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 154
    Points : 62
    Points
    62
    Par défaut
    Heu pour le having je veux bien un exemple parceque je vois pas trop.

  13. #13
    Membre expérimenté
    Profil pro
    Inscrit en
    Août 2005
    Messages
    1 240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 1 240
    Points : 1 646
    Points
    1 646
    Par défaut
    regarde dans la doc de l'analyseur de requete j'avoue que je n'ai pas en tête.

Discussions similaires

  1. [SQL SERVER 2000] UPDATE avec jointure
    Par Jsh dans le forum Développement
    Réponses: 2
    Dernier message: 23/01/2009, 10h08
  2. [SQL server 2000] Problème de jointure avec 'Case'
    Par Tankian dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/06/2006, 17h42
  3. [SQL server 2000] jointures de 3 tables
    Par batosai dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/04/2006, 09h45
  4. Réponses: 16
    Dernier message: 14/04/2006, 18h38
  5. [ms sql server 2000] top 1 dans une condition de jointure ?
    Par sylvkin dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/10/2005, 17h10

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