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 MySQL Discussion :

union / intersect


Sujet :

Requêtes MySQL

  1. #1
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 15
    Points : 12
    Points
    12
    Par défaut union / intersect
    Bonjour à tous,

    Je cherche à faire une requete dont le résultat est la réponse à la question :

    Existe il un matériel qui possède pour famille 1 la sous-famille 3,
    ET qui possède pour famille 2 la sous-famille 2,
    ET pour la famille 3 la sous-famille 2...

    pour mieux comprendre j'explique :

    Un matériel possède un type de matériel, pouvant être clavier par exemple.
    Ce matériel possède une ou plusieurs familles, donc connectique, langue...etc
    Chaque famille possède plusieurs sous-familles, donc connectique possède usb, ps2.., langue possède francais, russe...
    Un matériel ne peut posséder qu'une sous-famille par famille.

    Donc en plus clair, je voudrai savoir si un matériel ayant comme type de matériel clavier, possédant pour la famille connectique la sous-famille usb, ET possédant pour la famille langue la sous-famille francais...etc..existe ou pas.

    Merci de pouvoir m'éclairer je bloque dessus depuis 8h30 ce matin..
    mes derniers essais on été effectué avec union et intersect, où intersect semble mieux approprié.

    Avec la requête suivante donc je pensais cela fonctionnel, mais pas du tout car mysql me renvoi une erreur..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select id_materiel
    from recenser
    where id_famille = 1 //famille connectique
    and id_ss_famille = 3 //ss-famille usb
    intersect
    select id_materiel
    where id_famille = 2 //famille langue
    and id_ss_famille= 2 //ss_famille français
    [EDIT] : apparemment intersect s'utilise sur 2 tables, mais ne peut on pas sur 2 requêtes ? et tt simplement est-ce que intersect correspond à ce dont j'ai besoin ? Je ne connais ces fonction (union et intersect) que depuis ce matin, donc je ne suis pas sûr de comprendre exactement leur fonctionnement.

    L'erreur est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #1064 - You have an error in your SQL syntax; 
    check the manual that corresponds to your MySQL server 
    version for the right syntax to use near 
    'intersect select id_materiel where id_famille = 2 
    and id_ss_famille = 2 LI' at line 5
    Avez vous des idées ? Pour peut être plus de clarté, je vous met mon modèle relationnel
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type_materiel(id_type, lib_type)   
    famille(id_fam, lib_fam)   
    ss_famille(id_fam#, id_ss_fam, lib_ss_fam)   
    materiel (id_mat, id_type#)   
    recenser (id_fam#, id_ss_fam#, id_mat#)
    Merci d'avance...

    ps : j'ai bien chercher sur les différentes discussions de ce forum, mais sans trouver de réponse sur des "restriction liées" entre elles..

    Nec27

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 801
    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 801
    Points : 34 063
    Points
    34 063
    Billets dans le blog
    14
    Par défaut
    Pourquoi pas une simple auto-jointure ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT r1.id_materiel
    FROM recenser r1
    INNER JOIN recencer r2 ON r2.id_materiel = r1.id_materiel
    WHERE r1.id_famille = 1
        AND r1.id_ss_famille = 3
        AND r2.id_famille = 2
        AND r2.id_ss_famille = 2

  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 739
    Points
    11 739
    Par défaut
    En fait, MySQL n'accepte ni INTERSECT ni EXCEPT/MINUS. Il est donc nécessaire de passer par des jointures, comme proposé par Phil.

  4. #4
    Membre à l'essai
    Inscrit en
    Janvier 2011
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Que dire...

    Je me sens vraiment bête par une telle simplicité...

    Cela fonctionne parfaitement, rien à dire, respect, merci beaucoup.

    [EDIT] Oui j'avais bien remarqué mais sachant que union fonctionne sous mysql, et que je trouvais intersect dans les même docs que union, pendant mes recherches, je pensais que la seule fois où j'ai trouvé que intersect avec mysql posait problème été faux. Donc je suis resté sur cette idée puisque c'était celle qui été la plus approchante, selon moi, à ce que je recherchai.
    Mais il est clair que de toutes manières la méthode des jointures simples, il faut le dire, est vraiment simple....je suis un peu dégouté d'avoir passé 5h sur une réponse qui au final est si simple... Mais bon grâce à ce forum, je peux enfin avancer..merci beaucoup.

    Et très bonne journée à vous, sincèrement.

    Nec27

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

Discussions similaires

  1. UNION - INTERSECT
    Par MacFly58 dans le forum Débuter
    Réponses: 1
    Dernier message: 22/02/2011, 19h54
  2. Union, Intersection, soustraction
    Par paskal++ dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/06/2008, 14h57
  3. Minus,intersect,union et vue avec sql server 2000
    Par donny dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 22/02/2006, 07h46
  4. intersection et union d'une pile
    Par harris_macken dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 20/10/2005, 09h31

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