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 requête SQL


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut Problème requête SQL
    bonjour,
    j'ai une table TAB1 avec 2 colonnes A, B1.
    Une table TAB2 avec une colonne B2.

    Je voudrais remonter de la table TAB1 toutes les lignes en effectuant une jointure TAB1.B1 = TAB2.B2 et tel que s'il existe plusieurs B2 pour un même A, cela me renvoie A, NULL

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    TAB1 :
    X 0
    X 1
    Y 0
    Z 1
     
    TAB2 :
    0
    1
    La requête devrait me renvoyer les lignes suivantes :
    Merci d'avance.

  2. #2
    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 : 48
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select
        t1.A,
        case when count(*) > 1 then null else count(*) end result
    from
        TAB1 t1 INNER JOIN TAB2 t2 ON t1.B1 = t2.B2
    group by
        t1.A
    Notez bien que vous pouvez complètement vous passer de la jointure avec TAB2.

  3. #3
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Merci pour votre réponse c'est presque ça mais je ne veux pas ramener le compte de lignes mais la ligne elle même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
        t1.A,
        case when count(*) > 1 then NULL else t1.B1 end result
    FROM
        TAB1 t1 INNER JOIN TAB2 t2 ON t1.B1 = t2.B2
    GROUP BY
        t1.A
    mais ça ne fonctionne pas car il n'y a pas de fonction de groupe sur T1.B1.
    Une idée ?

  4. #4
    Membre chevronné Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Par défaut
    Citation Envoyé par herve91 Voir le message
    Merci pour votre réponse c'est presque ça mais je ne veux pas ramener le compte de lignes mais la ligne elle même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT
        t1.A,
        case when count(*) > 1 then NULL else t1.B1 end result
    FROM
        TAB1 t1 INNER JOIN TAB2 t2 ON t1.B1 = t2.B2
    GROUP BY
        t1.A
    mais ça ne fonctionne pas car il n'y a pas de fonction de groupe sur T1.B1.
    Une idée ?
    Que renvoie exactement cette requête ?

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2008
    Messages : 77
    Par défaut
    On peut en effet se passer de faier la jointure avec TAB2 dans la demande. Mais voici quelque chose avec la jointure qui devrait fonctionner:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT 
        t1.A,
        when nbr > 1 then null else t2.B2 end result
    FROM        
    (
      SELECT
        t1.A,
        t2.B2,
        count(*) nbr
      FROM
        TAB1 t1 INNER JOIN TAB2 t2 ON t1.B1 = t2.B2
      GROUP BY
        t1.A,t2.B2    
    )

  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 : 48
    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
    Je reste sur mon idée initiale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT
        t1.A,
        case when count(*) > 1 then NULL else max(t2.B2) end result
    FROM
        TAB1 t1 INNER JOIN TAB2 t2 ON t1.B1 = t2.B2
    GROUP BY
        t1.A
    ORDER BY
        t1.A ASC

Discussions similaires

  1. Problème requête SQL
    Par mandaillou dans le forum Langage SQL
    Réponses: 15
    Dernier message: 03/10/2005, 11h37
  2. Problème requête SQL dans page ASP
    Par rocs dans le forum ASP
    Réponses: 14
    Dernier message: 26/07/2005, 15h38
  3. problème requête sql
    Par psychoBob dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/07/2005, 17h50
  4. problème requête sql
    Par perfectdams dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 21/06/2005, 18h09
  5. Réponses: 8
    Dernier message: 23/10/2003, 16h22

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