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

Requêtes et SQL. Discussion :

Valeurs non attribuées


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Valeurs non attribuées
    Bonjour,

    je bloque un peu sur une requête SQL sous Access. Etant habitué à bosser sur oracle, je ne sais pas trop quelles sont les possibilités (ni les syntaxes) propres à Access pour ce cas de figure.

    Voici mon problème :

    Une table qui liste tous les matchs : T_JOURNEE.
    Les champs importants de cette table : DATE_MATCH, LIB_COMPETITION, CL (Club Local), CV(Club Visiteur), ARBITRE

    Admettons le cas suivant :

    Competition 1 Club1 vs Club2 : Arbitre1
    Competition 1 Club3 vs Club4 : Arbitre2
    Competition 1 Club5 vs Club6 : Arbitre3
    Competition 1 Club2 vs Club3 : Arbitre1
    Competition 1 Club5 vs Club1 : Arbitre1

    Je souhaite lister les Clubs qui n'ont pas été arbitrés par Arbitre1 pour la competition1. Je dois donc à l'issue de ma requête avoir Club4 et Club6.
    Et c'est là où je coince pas mal.

    Merci de votre aide.

    P.S : Le titre n'est peut être pas le mieux choisi...

  2. #2
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Bonjour,

    Si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select CL, CV from T_JOURNEE where ARBITRE <> 'Arbitre1' and LIB_COMPETITION = 'Competition 1'

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Malheureusement non. Car si je fais ça, dans les exemples que j'ai donné j'aurai comme résultat :

    Club3, Club4 (car arbitré par Arbitre2) et Club5, Club6 (Arbitré par Arbitre3).

    Or Club3 et Club5 ont bien été arbitrés par Arbitre1.

    Tu vois le souci?

  4. #4
    Expert confirmé
    Avatar de pc75
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3 662
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3 662
    Points : 4 047
    Points
    4 047
    Par défaut
    Re,

    Peut-être une piste ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select CL from T_JOURNEE
    where LIB_COMPETITION = 'Competition 1'
    and ARBITRE <> 'Arbitre1'
    and CL not in (select CL from T_JOURNEE where ARBITRE = 'Arbitre1')
    and CV not in (select CV from T_JOURNEE where ARBITRE = 'Arbitre1')

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je pense que l'idéal serait quelque chose comme ceci mais Access ne l'accepte pas.


    En gros :

    Je ne prends l'ensemble des clubs arbitrés par l'arbitre1 dans la Competition1. (SELECT CL[..] UNION SELECT CV[..] etc..)

    Et la requête principale prends les CL et les CV qui ne sont pas égaux à cette liste clubs pour la Competition1.


    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
    SELECT DISTINCT CL 
    FROM T_JOURNEE
    WHERE LIB_COMPETITION = "Competition1"
    AND CL NOT IN (SELECT DISTINCT CL 
                             FROM T_JOURNEE 
                             WHERE ARBITRES = "Arbitre1"
                             AND LIB_COMPETITION = "Competition1"
                             UNION
                             SELECT DISTINCT CV
                             FROM T_JOURNEE
                             WHERE ARBITRES = "Arbitre1"
                             AND LIB_COMPETITION = "Competition1")
    AND CV NOT IN (SELECT DISTINCT CL 
                             FROMT_JOURNEE 
                             WHERE ARBITRES = "Arbitre1"
                             AND LIB_COMPETITION = "Competition1"
                             UNION
                             SELECT DISTINCT CV
                             FROM T_JOURNEE
                             WHERE ARBITRES = "Arbitre1"
                             AND LIB_COMPETITION = "Competition1");
    Bref, cette syntaxe n'est pas prise en compte par Access, il faut donc chercher dans une autre direction.
    Si cette démarche n'aboutie pas, je me dis qu'une solution peut être de prendre tous les clubs d'une journée, de les stocker dans une zone de liste non visible.
    De requêter les clubs déjà arbitrés, et de comparer 1 à 1 en VBA. Mais bon, je veux me creuser la tête un peu encore sur cette requête

  6. #6
    Expert confirmé Avatar de Richard_35
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3 121
    Points : 4 596
    Points
    4 596
    Par défaut Erreur dans la requête Résultat.
    Bonsoir Horek,

    Je me permets de m'immiscer, Pc75...

    Il faut découper en tranches.

    Suggestion, via l'assistant :

    Requête R1 :
    • analyse T_Journee (FROM) ;
    • CL as Club, Arbitre (SELECT) ;
    • regroupement (GROUP BY).

    ==> 1 ligne par CL/Arbitre.


    Requête R2 :
    • analyse T_Journee (FROM) ;
    • CV as Club, Arbitre (SELECT) ;
    • regroupement (GROUP BY).

    ==> 1 ligne par CV/Arbitre.


    Requête R1_R2 :
    • UNION de R1 et R2

    ==> 1 ligne par Club/Arbitre, tous CL/CV confondus.


    Requête R1_R2_avec_Arbitre_Exclus :
    • analyse R1_R2 (FROM) ;
    • Club, Arbitre (SELECT) ;
    • Arbitre<>"Arbitre1" (WHERE).
    ==> 1 ligne par Club/Arbitre, uniquement Arbitre<>"Arbitre1"


    Requête R1_R2_avec_Arbitre_Inclus :
    • analyse R1_R2 (FROM) ;
    • Club, Arbitre (SELECT) ;
    • Arbitre="Arbitre1" (WHERE).
    ==> 1 ligne par Club/Arbitre, uniquement Arbitre="Arbitre1"


    Requête Résultat :
    • analyse :
      R1_R2 (idéalement groupée par club) liée à R1_R2_avec_Arbitre_Exclus sans flèche (FROM/INNER JOIN)
      R1_R2 (idéalement groupée par club) liée à R1_R2_avec_Arbitre_Inclus avec flèche à droite (FROM/LEFT JOIN) ;
    • Club, Arbitre (SELECT) ;
    • Arbitre de R1_R2_avec_Arbitre_Inclus=NULL (WHERE).
    ==> devrait te donner le résultat souhaité

    A tester (et donc à débugger)... mais je pense que tu vois le principe.

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2009
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour ta réponse.

    Je teste ça dès que je peux et je vous tiens au courant.

Discussions similaires

  1. Réponses: 6
    Dernier message: 10/02/2006, 14h46
  2. Problème avec Me.RecordSource : valeur non conforme
    Par Tchupacabra dans le forum Access
    Réponses: 6
    Dernier message: 02/12/2005, 18h01
  3. Réponses: 4
    Dernier message: 23/09/2005, 15h15
  4. Réponses: 3
    Dernier message: 24/05/2005, 09h19
  5. Réponses: 6
    Dernier message: 04/04/2003, 16h28

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