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 :

Problème triple jointure


Sujet :

Langage SQL

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Points : 127
    Points
    127
    Par défaut Problème triple jointure
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT pseudo
    FROM utilisateurs
        INNER JOIN liste_noire_1 ON
              pseudo <> pseudo_en_liste_noire_1
        INNER JOIN liste_noire_2 ON
              pseudo <> pseudo_en_liste_noire_2
    J'ai un problème avec cette non-équi jointure... Le but est donc de sélectionner les pseudos qui ne sont pas contenu dans liste_noire_1 et liste_noire_2.

    La liste noire 2 est prise en considération, mais pas la liste noire 1.

    Heuuu, je dois changer quoi pour que ça fonctionne ?

    En vous remerciant de votre aide, bonne soirée,
    Evocatii

  2. #2
    Membre éprouvé Avatar de Mathusalem
    Profil pro
    IT moa
    Inscrit en
    Décembre 2003
    Messages
    1 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : IT moa

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 008
    Points : 1 067
    Points
    1 067
    Par défaut
    j'aurais plutôt fait ça avec un not in ou un not exists

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pseudo
    FROM utilisateurs
    where pseudo not in(select pseudo_en_liste_noire_1 from liste_noire_1 )
    or pseudo not in(select pseudo_en_liste_noire_2 from liste_noire_2 )
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT pseudo
    FROM utilisateurs
    where pseudo not exists (select * from liste_noire_1 where pseudo_en_liste_noire_1 = pseudo)
    or pseudo not exists (select * from liste_noire_2 where pseudo_en_liste_noire_2 = pseudo)

  3. #3
    say
    say est déconnecté
    Membre expérimenté
    Avatar de say
    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 176
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 176
    Points : 1 300
    Points
    1 300
    Par défaut
    Il semble que ça devrait marcher également, et des perfs améliorées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT pseudo
    FROM utilisateurs
        LEFT OUTER JOIN liste_noire_1 ON
              pseudo = pseudo_en_liste_noire_1
        LEFT OUTER JOIN liste_noire_2 ON
              pseudo = pseudo_en_liste_noire_2
    WHERE liste_noire_1.pseudo is null and  liste_noire_2.pseudo is null
    Ils ne savaient pas que c'était impossible alors ils l'ont fait (Mark Twain)
    _ _ _ _ _ _ _ _ _

    La planète ne nous appartient pas, elle nous a été prêtée par nos enfants
    _ _ _ _ _ _ _ _ _

    Technos : Access, C++ Builder, SQL, PostgreSQL, Crystal Reports, XML entre autres

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 786
    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 786
    Points : 52 793
    Points
    52 793
    Billets dans le blog
    5
    Par défaut
    Essayez ceci, ce sera peut être plus performant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT pseudo
    FROM   utilisateurs
    WHERE  pseudo NOT EXISTS (SELECT * 
                              FROM   liste_noire_1 
                              WHERE  pseudo_en_liste_noire_1 = pseudo
                              UNION  ALL
                              SELECT * 
                              FROM   liste_noire_2 
                              WHERE  pseudo_en_liste_noire_2 = pseudo)
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Problème de jointure de tables
    Par AurelBUD dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/04/2005, 16h27
  2. Probléme de jointure
    Par Ajrarn dans le forum Langage SQL
    Réponses: 14
    Dernier message: 24/02/2005, 14h57
  3. Vraisemblable problème de jointure
    Par pimousse76 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 23/02/2005, 15h34
  4. [MS Access] Problème de jointure
    Par Erakis dans le forum Langage SQL
    Réponses: 3
    Dernier message: 07/02/2005, 21h15
  5. Problème de jointure ?!
    Par ebaynaud dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/11/2004, 11h27

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