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 :

Recherche de seulement deux valeurs dans table associative


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Recherche de seulement deux valeurs dans table associative
    Bonjours a tous
    Je soumets mon problème aux experts SQL

    Voici ma situation:
    J'ai un lien M-M entre une table COMPTE et une table PROPRIO j'ai donc crée une table intermédiaire appelée PRO_COMPTE.

    LA table PRO-COMPTE ressemble à ça:

    NUM_PRO_COMPTE (Auto) ! NUM_COMPTE ! NUM_PROPRIO
    1 ! 3 ! 1
    2 ! 3 ! 2
    3 ! 4 ! 3
    4 ! 5 ! 1

    Donc un compte peut contenir plusieurs proprio et un proprio peux avoir plusieurs compte avec d'autres proprio.

    Je m'arrache les cheveux pour construire une requete pour savoir au moment de la création d'un nouveau compte si ce compte n'existe pas déjà.

    Imaginons que je veuille créer un compte qui contient les PROPRIO 1 et 2
    ===> ce compte existe déjà: COMPTE 3
    PAr contre si je créé un compte qui contient le PROPRIO 2 seulement ====> ce compte n'existe pas.

    Je n'ai pas de piste pour construire cette requete il faudrai que je compare les PROPRIO du nouveau COMPTE avec la table PRO_COMPTE et controler qu'ele contient pour le meme COMPTE exactement les memes PROPRIO.

    Je n'arrive pas a traduire ce probleme, je compte sur vos lumières pour m'éclairer

    MERCI

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    LA table PRO-COMPTE ressemble à ça:

    NUM_PRO_COMPTE (Auto) ! NUM_COMPTE ! NUM_PROPRIO
    La colonne NUM_PRO_COMPTE est inutile puisque cette table est issue d'une association à cardinalités n-m.
    La clé primaire devrait être composée du couple (NUM_COMPTE, NUM_PROPRIO).

    Tu cherches donc à savoir si les proprio 1 et 2 ont déjà un compte ensemble ?
    Il faut sélectionner les comptes qui ont pour proprio 1 ou 2, au moins deux lignes dans la table PRO_COMPTE, et pas d'autre ligne ne contenant pas le proprio 1 ni 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT p1.NUM_COMPTE
    FROM PRO_COMPTE AS
    WHERE p1.NUM_PROPRIO IN (1, 2)
      AND NOT EXISTS (
        SELECT *
        FROM PRO_COMPTE AS p2
        WHERE p2.NUM_PROPRIO NOT IN (1, 2)
          AND p2.NUM_COMPTE = p2.NUM_COMPTE
      )
    GROUP BY p1.NUM_COMPTE
    HAVING COUNT(DISTINCT NUM_PROPRIO) = 2
    C'est le même problème que dans cette discussion sur les mots-clés associés aux photos.

  3. #3
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 738
    Points
    11 738
    Par défaut
    C'est un problème de division relationnelle... voici un exemple de réponse à ton exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT NUM_COMPTE
    FROM COMPTE C
      INNER JOIN PRO_COMPTE PC ON C.NUM_COMPTE = PC.NUM_COMPTE
    WHERE NUM_PROPRIO IN (1, 2)
    GROUP BY NUM_COMPTE
    HAVING COUNT(*) = 2

  4. #4
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Waou !!

    Merci pour vous êtres penchés si rapidement sur mon problème; il faut que je rassemble mes neurones pour digérer toutes les infos que vous venez de me donner. Je reviens vers vous très vite ...

  5. #5
    Candidat au Club
    Inscrit en
    Février 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Excellent la requête de cinephil marche comme un charme.

    Je vois aussi que vous avez modifié le titre de mon post (effectivement ce n'était pas si complexe que ce que je pensais !!!!)

    J'ai fais deux petites corrections une sur la jointure l'autre sur le Having (il ne passait pas chez moi):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT P1.NUM_COMPTE
    FROM PRO_COMPTE AS P1
    WHERE P1.NUM_PRO In (1,2) AND (Exists (SELECT * FROM PRO_COMPTE AS P2 WHERE P2.NUM_PRO NOT IN (1,2)  AND P2.NUM_COMPTE = P1.NUM_COMPTE )=False)
    GROUP BY P1.NUM_COMPTE
    HAVING (Count(*)=2);
    Par contre j'ai pas vraiment compris la philosophie de la "division relationnelle", la nuit porte conseil !!, demain peut-etre ....

    Encore un Grand grand Merci à vous, vive internet, vive le sql, vive ce forum ...

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

Discussions similaires

  1. [AC-2003] Recherche deux valeurs dans une table
    Par drakkar_agfa dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/09/2009, 16h03
  2. Echanger/Swap de deux valeurs dans une table
    Par Yvan76 dans le forum Requêtes
    Réponses: 1
    Dernier message: 07/08/2009, 16h23
  3. [MySQL] Permutation de deux valeurs dans une même colonne de table
    Par andry.aime dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 16/01/2009, 13h19
  4. inverser deux valeurs dans une meme table.
    Par sabotage dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/07/2008, 08h48
  5. Recherche valeur dans table Access
    Par Stefloulou dans le forum Access
    Réponses: 1
    Dernier message: 05/11/2005, 08h45

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