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 :

Aide sur une requête


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut Aide sur une requête
    Bonjour à tous,

    j'ai un probleme sur une requete que je dois réaliser, et j'ai un peu du mal à la formuler
    voici les données :

    codepers | codelivre
    11 | 10
    12 | 10
    17 | 10
    17 | 14
    En fait, il s'agit d'une table en rapport avec des livres... codepers, c'est, le code d'un auteur, et codelivre, c'est le code du magasine dans lequel il publie ses articles.

    ce que je cherche a avoir, c'est les couples d'auteur qui ont TOUJOURS publié dans le meme magasine.

    ca devrait donné ca au final :

    codepers1 | codepers2 | codelivre
    11 | 12 | 10
    12 | 11 | 10
    Est ce que vous avez une idée dont je peux faire ca ?

    Merci d'avance.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 434
    Points
    28 434
    Par défaut
    Quelque chose comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT  t1.codepers AS codepers1
        ,   t2.codepers AS codepers2
        ,   t1.codelivre
    FROM    matable AS t1
        INNER JOIN
            matable AS t2
            ON  t1.codelivre = t2.codelivre
            AND t1.codepers <> t2.codepers

  3. #3
    Membre éclairé Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Points : 870
    Points
    870
    Par défaut
    non, pas trop !! je dirais que ce genre de jointure, c'est le minimum qu'on puisse attendre, mais ca donne ca comme resultat :

    codepers1 | codepers2 | codelivre |
    11 | 17 | 10 |
    11 | 12 | 10 |
    11 | 17 | 10 |
    11 | 12 | 10 |
    12 | 17 | 10 |
    12 | 11 | 10 |
    12 | 11 | 10 |
    17 | 12 | 10 |
    17 | 11 | 10 |
    17 | 11 | 10 |
    or, le 17 a publié dans une revue seul, sans le 11 ni le 12, donc il ne devrait pas apparaitre !

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 434
    Points
    28 434
    Par défaut
    J'avais omis le toujours en effet.
    Ce qui sous-entendrait qu'ils n'ont jamais publié séparément dans un autre magazine ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    SELECT  codepers1
        ,   codepers2
        ,   codelivre
    FROM    (   SELECT  t1.codepers AS codepers1
                    ,   t2.codepers AS codepers2
                    ,   t1.codelivre
                FROM    matable AS t1
                    INNER JOIN
                        matable AS t2
                        ON  t1.codelivre = t2.codelivre
                        AND t1.codepers <> t2.codepers
            )   AS  t0  
    WHERE   NOT EXISTS
            (   SELECT  1
                FROM    matable AS t3
                WHERE   t0.codelivre <> t3.codelivre
                    AND t3.codepers IN (t0.codepers1, t0.codepers2)
                HAVING  COUNT(*) < 2         
            )

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    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 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Essayez ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    With MaTable (codepers, codelivre) AS
    (
    select 11, 10 union all
    select 12, 10 union all
    select 17, 10 union all
    select 17, 14
    )
      ,  SR (codepers, codelivre) AS
    (
      select codepers, max(codelivre) as codelivre
        from MaTable
    group by codepers
      having count(distinct codelivre) = 1
    )
    select S1.codepers, S2.codepers, S1.codelivre
      from SR as S1
           inner join SR as S2
             on S2.codelivre = S1.codelivre
            and S2.codepers <> S1.codepers;
     
    codepers    codepers    codelivre
    ----------- ----------- -----------
    11          12          10
    12          11          10

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

Discussions similaires

  1. [SQL] Besoin d'aide sur une requête
    Par Angath dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/01/2006, 16h26
  2. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  3. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29
  4. Aide sur une requête
    Par TshAw dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/02/2005, 11h42
  5. Aide sur une requête (Group By...??)
    Par Cocolapin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/12/2004, 10h26

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