Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 178
    Points : 45
    Points
    45

    Par défaut self join foireux

    Bonjour à tous,

    J'ai un pépin pour exclure du résultat les valeurs si une autre valeur est contenue dans une ligne.

    Plus précisément :

    Soit 2 tables :

    table 1 :
    table 2 :
    Code :
    1
    2
    3
    4
    5
     
    id 
    critere
    name
    complement
    Avec quelques valeurs on a :
    table 1
    Code :
    1
    2
    3
    4
    5
     
    1 - Mary - gouts
    2 - Paul  - gouts
    3 - Pierre - gouts
    ...
    table 2
    Code :
    1
    2
    3
    4
    5
    6
    7
     
    1 - gouts - confiture - fraise
    2 - gouts - confiture - framboise
    3 - gouts - confiture - toto
    4 - gouts - yaourt - ananas
    5 - gouts - yaourt - fraise
    ...
    Et bien voilà, comment je fais pour dire que si toto existe dans le complément, alors toute la colonne name ne sera as prise en compte (ici confiture)

    Tentative :
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT `t1`.`name`
    FROM `table1` `t1`
     
    JOIN `table2` `t2`
    ON `t2`.`critere` = `t1`.`critere`
     
    WHERE `t2`.`complement` NOT IN ('toto')
    Et en fait, ce code me lâche quand même confiture dans les résultats.

    Vous avez une piste ?

    Attention, ce n'est pas un exemple applicatif, mais de logique, on se contrefout des goûts et autres confitures

    Merci à vous,

    A bientôt,

    LeHibou

  2. #2
    Modérateur
    Avatar de CinePhil
    Homme Profil pro Philippe Leménager
    Ingénieur d'études en informatique
    Inscrit en
    août 2006
    Messages
    13 747
    Détails du profil
    Informations personnelles :
    Nom : Homme Philippe Leménager
    Âge : 51
    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 : 13 747
    Points : 22 930
    Points
    22 930

    Par défaut

    La requête que tu donnes ne va pas te donner 'confiture' mais l'ensemble {Mary, Paul, Pierre} puisque tu ne sélectionnes que t1.name.

    Ensuite, puisque ta restriction (WHERE) ne porte que sur t2.complement, seules les lignes jointes avec toto seront exclues mais pas celles avec fraise ni framboise.

    Plutôt que de prendre un exemple bidon, donne la vraie structure de tes tables, des données exemples, le résultat attendu et une exeplication claire de ce que tu souhaites obtenir. Pour le moment, on ne peut que conjecturer une solution.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique. Autoentrepreneur.
    Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 178
    Points : 45
    Points
    45

    Par défaut

    Bonjour Cinéphil,

    Et bonne année à tous.

    Sans déconner, plus clair que ça ?

    Et bien voilà, comment je fais pour dire que si toto existe dans le complément, alors toute la colonne name ne sera pas prise en compte (ici confiture)
    Les exemples sont peut-être bidons, mais la logique reste identique !

    Le problème, c'est que c'est une pelote de laine et impossible de tout placer ici sans gonfler les forumeurs.

    Je vais mettre à jour l'exemple.

  4. #4
    Expert Confirmé Sénior
    Homme Profil pro
    Inscrit en
    mai 2002
    Messages
    3 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : mai 2002
    Messages : 3 006
    Points : 4 555
    Points
    4 555

    Par défaut

    bonjour,

    Non c'est pas claire, vous inversez complément / name .. ou alors j'ai rien compris.
    De plus j'ai pas compris non plus le résultat attendu.


    Indiquez le résultat souhaité en partant de votre exemple d'entrée.

  5. #5
    Membre du Club
    Inscrit en
    mai 2010
    Messages
    178
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 178
    Points : 45
    Points
    45

    Par défaut

    Si je suis un incompris, je le vis bien car j'ai réussi.

    J'ai fais un "not in" suivi d'une sous requête.

    Simple. Efficace.

    Merci à vous,

    A bientôt,

    LeHibou

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •