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 :

pb intersection d'une meme table


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut pb intersection d'une meme table
    salut,
    j'ai une table PIECESPROJET (nprojet + npiece) qui me pose de grosses difficultés

    je dois extraire les pièces (npiece) se trouvant dans les projets (nprojet) 1 et 3... mais ça foire...

    j'ai vu que INTERSECT est valable en SQL2, mais j'ai pas ça... sniff
    alors j'essaie de faire des requêtes de fou, et ça foire... pouvez-vous m'aider ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select npiece from piecesprojet where npiece IN
    (("select distinct npiece from piecesprojet where nprojet='1'"),("select distinct npiece from piecesprojet where nprojet='3'"))
    ou encore (avec une partie en plus mais qui gêne pas) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nompiece, couleur from pieces where npiece in ("select npiece from piecesprojet where nprojet='1' and npiece in (select npiece from piecesprojet where nprojet='3' )")
    je voulais utiliser EXISTS ou ALL, mais ça ne marche jamais... je dois pas avoir la bonne syntaxe...

    quelqu'un a t il la solution ou des exemples pour m'aider ?

  2. #2
    Membre chevronné Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Par défaut
    Pour pouvoir te repondre faudrait deja que l'on sache ton sgbd ?
    Et voir si il y en a pas un plus approprie que celui ci !
    Merci

  3. #3
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    voilà le truc :

    FOURPIECE (*NFour, *NPiece)
    FOURNISSEURS (*NFour, NomFour, VilleFour)
    PIECESPROJET (*NProjet, *NPiece)
    PIECES (*NPiece, NomPiece, Couleur, Poids)
    PROJETS (*NProjet, NomProjet, NUsine)
    USINES (*NUsine, VilleUsine)

    mais bon... y'a vraiment que PIECESPROJET qui nous intéresse dans le cas présent...

    comment faire pour récupérer le npiece des pièces présentes dans le projet 1 ET 3 ? la syntaxe du code laissée est-elle bonne ou non ? (ça m'intéresse aussi) merci tous en tout cas...

  4. #4
    Membre chevronné Avatar de piff62
    Inscrit en
    Décembre 2003
    Messages
    431
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2003
    Messages : 431
    Par défaut
    Question : deuxieme edition :
    Quel est ta base de donnees ?
    MySQL, postgresql ? ou autre ?

  5. #5
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    en fait, j'ai l'impression que dès que je fais un "IN" ça ne marche pas... bizarre le truc... ça me fait tourner en rond... la syntaxe a l'air correcte (sous réserve que je ne dise pas trop de conneries) mais ça ne me donne rien comme résultat (mais pas d'erreurs)

  6. #6
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    ooops désolé, c'est la première fois que je post dans ce forum-là, et je dois avouer que j'ai pas lu les consignes d'usage (super-méga-trop-pressé)

    donc : MySQL 4.0.22 sous phpMyAdmin 2.6.0-pl2

  7. #7
    Membre confirmé

    Inscrit en
    Octobre 2002
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Octobre 2002
    Messages : 139
    Par défaut
    Salut,

    j'ai une question bête est-ce que tu as essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT npiece 
    FROM piecesprojet 
    WHERE nprojet = '3' OR nprojet = '1'
    sinon tu peux aussi avoir ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT distinct npiece 
    FROM piecesprojet 
    WHERE nprojet = '3'
    UNION
    SELECT distinct npiece 
    FROM piecesprojet 
    WHERE nprojet = '1'
    qui conforme au langage sql mais je ne sais pas sis ça passe sous mysql.

    krest

  8. #8
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    merci l'ami, je vais tester ces requêtes mais je pense que c'est pas bon.
    en fait le OR n'est pas adéquat, il faut que la pièce soit à la fois dans le projet 1 ET le projet 3
    OR renvoie un autre résultat
    en mettant AND à la place, j'ai l'impression que ça ne marche pas...

  9. #9
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Bizarre ta syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select nompiece, couleur from pieces where npiece in ("select npiece from piecesprojet where nprojet='1' and npiece in (select npiece from piecesprojet where nprojet='3' )")

    ça irait pas mieux ainsi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nompiece, couleur from pieces,pieceprojet where piece.npiece=pieceprojet.npiece and nprojet=1 and npiece in (select npiece from piecesprojet where nprojet=3)
    J'ai supposé que npiece était numérique. Si ce n'est pas le cas, il faudra rajouter ' '

  10. #10
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    Citation Envoyé par atog
    merci l'ami, je vais tester ces requêtes mais je pense que c'est pas bon.
    en fait le OR n'est pas adéquat, il faut que la pièce soit à la fois dans le projet 1 ET le projet 3
    OR renvoie un autre résultat
    en mettant AND à la place, j'ai l'impression que ça ne marche pas...
    Normal, sur un même enregistrement, le numero de projet ne pas à la fois être 1 et 3.

  11. #11
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    SQL Standard, je ne sais pas si cela marche avec mySQL.
    En supposant que (nprojet + npiece) soit un identifiant dans ta table PiecesProjet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nPiece
    FROM PiecesProjet
    WHERE nProjet IN (1, 3)
    GROUP BY nPiece
    HAVING COUNT(*) = 2
    Si (nprojet + npiece) n'est pas identifiant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT nPiece
    FROM PiecesProjet
    WHERE nProjet IN (1, 3)
    GROUP BY nPiece
    HAVING COUNT(DISTINCT nProjet) = 2

  12. #12
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    merci tous,
    Tofalu a la bonne réponse je crois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select nompiece, couleur from pieces,piecesprojet where pieces.npiece=piecesprojet.npiece and nprojet=1 and piecesprojet.npiece in ("select npiece from piecesprojet where nprojet=3")
    la syntaxe avec IN prend l'un OU l'autre des éléments, ce qui ne correspond pas à la solution... l'imbrication d'une deuxième requête est adéquate (comme Sheila - humour - )

    pour l'explication du AND, je me doutais que c'était impossible car ça accéderait sur un même enregistrement ayant deux valeurs...

    en tout cas, mille mercis à tous !

    juste un dernier problème : la requête ne marche pas en mysql
    elle fonctionne en Access (mais ça me fait ch.....ier d'utiliser Access), y'a t il une solution ? je dois installer php et sql sur mon PC pour faire de vraies requêtes SQL (et pas mysql) ?

  13. #13
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Dans ma solution il n'y a pas de sous-requête, cela devrait marcher avec mySQL.

    Ajouter la table PIECE pour avoir la couleur est tout bête.

  14. #14
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    Citation Envoyé par pgibone
    Dans ma solution il n'y a pas de sous-requête, cela devrait marcher avec mySQL.
    Ajouter la table PIECE pour avoir la couleur est tout bête.
    en fait, j'ai surtout repéré l'agrégat IN
    il choisit l'un ou l'autre (soit 1 soit 3, mais pas à la fois 1 et 3)... ça fait que ça ne correspond pas tout à fait à ce qui est demandé (enfin je pense)

    le count peut compter deux fois le 1 non ? ce qui ne correspond pas tout à fait à ce qu'on veut (enfin je pense aussi)


    et c'est vrai que les sous-requêtes en mySQL ont des difficultés à fonctionner sans ajout de " (pourquoi ?)

  15. #15
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Citation Envoyé par atog
    en fait, j'ai surtout repéré l'agrégat IN
    il choisit l'un ou l'autre (soit 1 soit 3, mais pas à la fois 1 et 3)... ça fait que ça ne correspond pas tout à fait à ce qui est demandé (enfin je pense)
    Je pense que si puisqu'il s'agit d'un GROUPE et non d'un enregistrement, essaye !
    Citation Envoyé par atog
    le count peut compter deux fois le 1 non ? ce qui ne correspond pas tout à fait à ce qu'on veut (enfin je pense aussi)
    C'est pourquoi j'ai donné deux solutions , une fois avec le couple identifiant une fois non.

  16. #16
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    ok ok, je vais essayer, mieux vaut plusieurs méthodes qu'une seule

    merci à tous !

  17. #17
    Membre averti
    Inscrit en
    Novembre 2004
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 23
    Par défaut
    oui ça a collé (je balance dans Access maintenant, donc la deuxième n'a pas fonctionner à cause du "distinct")

    mille mercis à tous et toutes !

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

Discussions similaires

  1. [HIBERNATE] lier 2 bases de données dans une même table
    Par bondarenko dans le forum Hibernate
    Réponses: 4
    Dernier message: 31/03/2006, 17h01
  2. DOUBLE REQUETE SUR UNE MEME TABLE
    Par MORAS dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/01/2006, 14h40
  3. 2 auto increment dans une meme table
    Par gesualda dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 12/10/2005, 10h31
  4. Association 1:n sur une meme table
    Par dafalcon dans le forum Décisions SGBD
    Réponses: 15
    Dernier message: 27/04/2005, 10h07
  5. [debutant]Modelistation > plusieurs fk d'une meme table
    Par christophebmx dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 15/11/2004, 16h44

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