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

Adaptive Server Enterprise Sybase Discussion :

LEFT OUTER JOIN


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut LEFT OUTER JOIN
    Bonjour à tous.

    J'ai un problème dans l'écriture d'un requête...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE test ( NUMERO INTEGER, VALEUR CHAR(1) )
    GO
    INSERT test VALUES (1,'A')
    INSERT test VALUES (2,'A')
    INSERT test VALUES (2,'B')
    INSERT test VALUES (3,'A')
    INSERT test VALUES (4,'B')
    GO
    Je cherche tous les "NUMERO" de la table "test" qui ont une ligne "A" mais pas de ligne "B" (soit 1 et 3)

    Je ne vois pas comment m'en sortir alors j'ai commencé par ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT	*
    FROM	test A
    	LEFT OUTER JOIN test B
    	ON A.NUMERO = B.NUMERO
    WHERE A.VALEUR = 'A'
    AND B.VALEUR = 'B'
    Résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    NUMERO	VALEUR	NUMERO	VALEUR    
    2	A	2	B
    et bizarrement mon LEFT OUTER JOIN se comporte comme un INNER JOIN !!!
    je m'attendais plutôt à un résultat comme celui-ci :
    (puisque c'est un OUTER JOIN de A vers B je devrais avoir toutes les lignes de "A" non ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    A.NUMERO	A.VALEUR	B.NUMERO	B.VALEUR
    1		A		NULL		NULL
    2		A		2		B
    3		A		NULL		NULL
    Quelque chose que je n'ai pas compris ?

    Comment résolvez vous mon problème de départ ? (les "NUMERO" qui ont une ligne "A" mais pas de ligne "B")

    Merci !

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    et bizarrement mon LEFT OUTER JOIN se comporte comme un INNER JOIN !!!
    Jointure externe et condition de restriction.

    Vous pouvez effectivement passer par une jointure externe (après avoir remonter votre filtre sur B dans la clause de jointure) puis filtrer sur b.numero is null ou utiliser NOT EXISTS :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select numero, valeur
      from test t
     where valeur = 'A'
       and not exists (select 1
                         from test t2
                        where t2.numero = t.numero
                          and t2.valeur = 'B')

  3. #3
    Membre habitué Avatar de GAEREL
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 160
    Points : 147
    Points
    147
    Par défaut
    Merci

    Effectivement le code suivant fonctionne :
    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	test A
    	LEFT OUTER JOIN test B
    	ON A.NUMERO = B.NUMERO
    	AND B.VALEUR = 'B'
    WHERE A.VALEUR = 'A'
    AND B.VALEUR IS NULL
     
     
    NUMERO	VALEUR	NUMERO	VALEUR    
    1	A	(null)	(null)    
    3	A	(null)	(null)
    Cordialement

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

Discussions similaires

  1. Probleme de NULL avec LEFT OUTER JOIN
    Par jiluc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 12/01/2006, 14h42
  2. Bug LEFT OUTER JOIN Firebird
    Par Fabio2000 dans le forum SQL
    Réponses: 3
    Dernier message: 21/11/2005, 09h08
  3. Problème avec left outer join
    Par jgfa9 dans le forum Requêtes
    Réponses: 1
    Dernier message: 22/08/2005, 21h07
  4. Problème de performance avec LEFT OUTER JOIN
    Par jgfa9 dans le forum Requêtes
    Réponses: 6
    Dernier message: 17/07/2005, 13h17
  5. concatenation de chaine dans un left outer join
    Par the_edge dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 11/11/2004, 16h08

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